【uva-124】Following Orders (拓扑排序)竟然自己写出了全排列的算法!
来源:互联网 发布:衣服数据参考 编辑:程序博客网 时间:2024/05/16 18:33
题目大意:
第一行所有字母。
第二行两个两个字母是有偏序关系的。
最后输出要是所有符合偏序关系的按字母列表顺序输出。
思路:
存好偏序关系。
从小到大存好字母元素。
先找出所有可以放在首字母的字母(没有必须放在自身之前关系的),要注意i=j分开考虑。
用dfs寻找下一个可以排的字母。
还要注意dfs完成退后一步时要把标记找到的改成false。
基本思路没有问题但是数据处理要很细心。
调试了很久。
我还是……
唉一点也不成熟。
就是个巨婴呢。
/* uva 124 by zhuhua Time limit: 3000 ms AC Time: 0 ms???*/#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>using namespace std;bool order[30][30];int exist[30];int siz;int head[30];int headsiz;int output[30];bool used[30];void dfs(int now,int n,int tot){ used[now]=true; if(n==tot) { for(int i=0;i<siz;i++) printf("%c",'a'+output[i]); cout<<endl; return; } else { for(int i=0;i<siz;i++) { bool cando=true; if(!used[exist[i]]) { for(int j=0;j<n;j++) { if(exist[i]!=output[j]&&order[exist[i]][output[j]]) {cando=false;break;} } if(cando) { output[n]=exist[i]; dfs(exist[i],n+1,tot); used[exist[i]]=false; } } } }}int main(){ string input,ord; int cas=0; while(getline(cin,input)) { if(cas++)cout<<endl; siz=0; for(int i=0;i<input.length();i++) { if(input[i]!=' ') exist[siz++]=input[i]-'a'; } sort(exist,exist+siz); memset(order,false,sizeof(order)); getline(cin,ord); for(int i=0;i<ord.length();i=i+4) { int x=ord[i]-'a'; int y=ord[i+2]-'a'; order[x][y]=true; } bool flag; headsiz=0; for(int i=0;i<siz;i++) { flag=true; for(int j=0;j<siz;j++) { if(i==j)continue; if(order[exist[j]][exist[i]]) { flag=false; break; } } if(flag) { head[headsiz++]=exist[i]; } } for(int i=0;i<headsiz;i++) { output[0]=head[i]; dfs(head[i],1,siz); used[head[i]]=false; } } return 0;}
阅读全文
0 0
- 【uva-124】Following Orders (拓扑排序)竟然自己写出了全排列的算法!
- poj 1270&& uva 124 Following Orders(拓扑排序、DFS)
- POJ:1270 Following Orders (全拓扑排序)
- poj 1270 || uva 124 Following Orders (拓扑排序)
- UVA 124 & POJ 1270 Following Orders(拓扑排序)
- uva 124 Following Orders 拓扑排序输出全部序列
- Following Orders(拓扑排序)
- POJ 1270 Following Orders(拓扑排序)
- pop 1270 Following Orders(拓扑排序)
- POJ1270 Following Orders(拓扑排序)
- POJ1270 Following Orders(拓扑排序+回溯)
- POJ 1270 Following Orders 拓扑排序全输出
- (拓扑排序)||(全排序)Following Orders(11.3.1))
- UVa 124 - Following Orders
- UVa 124 Following Orders
- poj 1270 Following Orders (简单的拓扑排序)
- poj 1270 Following Orders(DFS+拓扑排序)
- (POJ 1270)Following Orders 求序列在限制条件下的 [全排列]
- 内置锁(三)---- synchronized的几个要注意的对象监视器
- mysql常规命令
- VTK 7.1.0+window7_64位+QT5.5配置及第一个实例运行
- java开发遇到的简单问题
- 二叉树的顺序存储实现及遍历
- 【uva-124】Following Orders (拓扑排序)竟然自己写出了全排列的算法!
- 18届清华硕士收割18家互联网sp offer总结
- Python---思维导图
- Access denied for user 'root'@'localhost' (using password:YES)解决方法
- 《编程之美》介绍和pdf下载
- hdu1272小希的迷宫(并查集)
- golang web开发框架httprouter:开发简单的 REST API 服务器
- spring入门程序HelloWorld
- 集合类,Collection,List