poj 1128 Frame Stacking(拓扑排序+DFS(递归))
来源:互联网 发布:凡科互动 游戏源码 编辑:程序博客网 时间:2024/06/05 20:19
1.记录每个出现的不同的字母的边界
2.记录这个字母是否在原图中出现
3.入度记录该字母是否覆盖了其他字母
4.拓扑排序
5.深搜时的递归记得回溯
代码在这:
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <iterator>#include <vector>using namespace std;struct node{ int x1,x2; int y1,y2; node() { x1=y1=100; x2=y2=-100; }};bool used[30];int into[30];char s[50][50];int p[50][50];vector<char> ans;void build(node f[]){ for(int i=0;i<26;++i) { if(used[i]) { for(int j=f[i].x1;j<=f[i].x2;++j) { if(s[j][f[i].y1]!=i+'A'){ int z=s[j][f[i].y1]-'A'; if(p[i][z]==0) { into[z]++; p[i][z]=1; } } if(s[j][f[i].y2]!=i+'A'){ int z=s[j][f[i].y2]-'A'; if(p[i][z]==0) { into[z]++; p[i][z]=1; } } } for(int j=f[i].y1;j<=f[i].y2;++j) { if(s[f[i].x1][j]!=i+'A'){ int z=s[f[i].x1][j]-'A'; if(p[i][z]==0) { into[z]++; p[i][z]=1; } } if(s[f[i].x2][j]!=i+'A'){ int z=s[f[i].x2][j]-'A'; if(p[i][z]==0) { into[z]++; p[i][z]=1; } } } } }}void po(int dep,int cnt){ if(dep>=cnt) { copy(ans.begin(),ans.end(),ostream_iterator<char>(cout)); cout<<endl; return; } for(int i=0;i<26;++i) { if(used[i]){ if(into[i]==0) { ans.push_back(i+'A'); into[i]=-1; for(int k=0;k<26;++k) if(p[i][k]==1) into[k]--; po(dep+1,cnt); ans.pop_back(); into[i]=0; for(int k=0;k<26;++k) if(p[i][k]==1) into[k]++; } } }}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(p,0,sizeof(p)); memset(s,0,sizeof(s)); memset(used,0,sizeof(used)); memset(into,0,sizeof(into)); node f[30]; ans.clear(); char ss[50]; getchar(); for(int i=0;i<n;++i) { scanf("%s",ss); for(int j=0;j<m;++j) { s[i][j]=ss[j]; if(s[i][j]!='.') { int w=s[i][j]-'A'; used[w]=true; if(i<f[w].x1) f[w].x1=i; if(i>f[w].x2) f[w].x2=i; if(j<f[w].y1) f[w].y1=j; if(j>f[w].y2) f[w].y2=j; } } } build(f); int cnt=0; for(int i=0;i<26;++i) if(used[i]) cnt++; po(0,cnt); } return 0;}
0 0
- poj 1128 Frame Stacking(拓扑排序+DFS(递归))
- POJ 1128 Frame Stacking dfs+拓扑排序
- poj 1128 Frame Stacking(DFS+拓扑排序)
- POJ 1128 Frame Stacking(拓扑排序+DFS)
- POJ 1128 Frame Stacking(拓扑排序+dfs)
- POJ 1128 Frame Stacking(拓扑排序+dfs)
- poj 1128 Frame Stacking(DFS+拓扑排序)
- pku 1128 Frame Stacking(dfs+拓扑排序)
- POJ 1128 Frame Stacking (拓扑排序)
- poj 1128 Frame Stacking (建图+拓扑排序)
- [POJ 1128] Frame Stacking (拓扑排序)
- POJ--1128--Frame Stacking【拓扑排序】
- poj 1128 Frame Stacking(拓扑排序)
- POJ 1128 Frame Stacking 拓扑排序+暴搜
- POJ 1128 Frame Stacking(拓扑排序)
- POJ1128 Frame Stacking [拓扑排序+dfs]
- zoj1083 Frame Stacking 拓扑排序,Dfs
- POJ1128 Frame Stacking【DFS,拓扑排序】
- 隐藏状态栏的两种方法
- Oracle的基本数据类型有些怎么使用
- 8行代码教你搞定导航控制器全屏滑动返回效果!
- _ADD_COL_OPTIM_ENABLED参数
- JPush推送服务集成
- poj 1128 Frame Stacking(拓扑排序+DFS(递归))
- jquery grid表格checkbox的关联勾选与取消
- 使用thinkphp+dwz博客总结
- 2818: Gcd
- Java获取当前日期时间
- 抛弃mysql模糊查询,使用sphinx做专业索引
- poj 3122 Pie
- Interpolation Tricks
- 大数据量的算法面试题