poj1270 DFS
来源:互联网 发布:广西公务员网络考试 编辑:程序博客网 时间:2024/06/02 03:45
/** * poj1270 DFS * 算是比较经典的DFS,先把第一行输入的字符存下来,排序。再把第二行给的那些约束也存下来,用c数组保存下来 * 然后dfs,如果本次新添加在输出数组后面的字符,根据约束不应该放在某个已有字符的后面,那么就中断这条径的dfs就可以了 */#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char tmp[400];char output[27];char v[26];bool c[26][26];bool flag[26];void dfs(int num,int len){ if(num == len){ printf("%s\n",output); } else{ for(int i=0;i<strlen(v);++i){ if(!flag[v[i] - 'a']){ flag[v[i] - 'a'] = true; output[num] = v[i]; //检查顺序要求是否满足 bool validflag = true; for(int j=0;j<26;++j){ if(flag[j] && c[v[i] - 'a'][j]){ validflag = false; } } if(validflag){ dfs(num+1,len); } flag[v[i] - 'a'] = false; } } }}int main(){ while(scanf("%[^\n]",tmp)!=EOF){ getchar(); memset(v,0,sizeof(v)); memset(output,0,sizeof(output)); for(int i=0;i<26;++i){ for(int j=0;j<26;++j){ c[i][j] = false; } } int idx = 0; for(int i=0;i<strlen(tmp);++i){ if(tmp[i]!=' '){ v[idx++] = tmp[i]; } } sort(v,v+idx); scanf("%[^\n]",tmp); getchar(); idx = 0; int front,behind; for(int i=0;i<strlen(tmp);++i){ while(tmp[i] == ' ') ++i; front = tmp[i++] - 'a'; while(tmp[i] == ' ') ++i; behind = tmp[i] - 'a'; c[front][behind] = true; } dfs(0,strlen(v)); printf("\n"); } return 0;}
0 0
- poj1270 DFS
- POJ1270【拓扑排序+DFS】
- 拓扑排序+DFS(POJ1270)
- poj1270 - Following Orders
- POJ1270--Following Orders
- poj1270 Following Orders
- 0.5poj1270(topo)
- poj1270 Following Orders
- poj1270 Following Orders
- poj1270拓扑排序
- POJ1270 Following Orders(拓扑排序)
- POJ1270 Following Orders(拓扑排序+回溯)
- poj1270 Following Orders (拓扑排序+回溯输出路径)
- DFS
- DFS
- dfs
- dfs
- dfs
- xampp下遇到的问题
- poj1231 模拟?简单几何?
- Java在线编译
- view的属性
- statement 和PreparedStatement
- poj1270 DFS
- java中怎么判断一个字符串中包含某个字符或字符串
- Item高度固定下动态设置ListView的高度
- 对台湾视频站点的再次渗透尝试
- poj1321 DFS
- poj1543 遍历
- 学习OpenCV范例(二)——OpenCV如何扫描图像、利用查找表和计时
- 《算法概论》思维导图
- vxworks6.6+workbench3.0+vmware工具链