poj1094
来源:互联网 发布:延长射精 知乎 编辑:程序博客网 时间:2024/05/19 17:59
受此文启发:
http://www.cnblogs.com/pushing-my-way/archive/2012/08/23/2652033.html
用链式表实现拓扑排序,我这里用的是栈,当然队列也是可以的。
#include<iostream>#include<cstring>#include<stack>using namespace std;int rudu[27],map[27][27],list[27];int toposort(int n){bool flag;int i,j,rudu1[27],temp1;stack<int>s1;memcpy(rudu1,rudu,sizeof(rudu1));for(i=1;i<=n;i++)if(rudu1[i]==0)s1.push(i);i=0;flag=0;while(s1.size()!=0){if(s1.size()>1)flag=1;temp1=s1.top();s1.pop();list[++i]=temp1;for(j=1;j<=n;j++)if(map[temp1][j]==1&&--rudu1[j]==0)s1.push(j);}if(i<n)return 1;//有环,无法形成n个元素的拓扑排序 else if(flag==1) return 2;//没有环,但入度为0的点不唯一,当前没有形成拓扑排序,但可以形成n个元素的拓扑排序 return 3;//已经形成n个元素的拓扑排序 }int main(){bool flag;char data[100];int i,n,m,ans,j;while(scanf("%d%d",&n,&m)&&(n!=0||m!=0)){flag=1;memset(rudu,0,sizeof(rudu));memset(map,0,sizeof(map));for(i=1;i<=m;i++){scanf("%s",data);if(flag){if(map[data[0]-64][data[2]-64]==0){map[data[0]-64][data[2]-64]=1;rudu[data[2]-64]++;}ans=toposort(n);if(ans==1){flag=0;printf("Inconsistency found after %d relations.\n",i);}else if(ans==3){flag=0;printf("Sorted sequence determined after %d relations: ",i);for(j=1;j<=n;j++)printf("%c",list[j]+64);printf(".\n");}}}if(flag)printf("Sorted sequence cannot be determined.\n");}}
0 0
- POJ1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- POJ1094
- poj1094注意事项
- POJ1094解题报告
- Poj1094拓扑排序总结
- 拓扑排序 poj1094
- poj1094 拓扑排序
- java源码StringBuffer
- 第十七篇:博采众长--初探WDDM驱动学习笔记(七)
- GROUP BY,WHERE,HAVING之间的区别和用法
- 【剑指offer】不用加减乘除做加法
- POJ1035-Spell checker(java版)
- poj1094
- static关键字的作用
- android listview点击跳转
- java中hashmap
- Android SharedPreferences
- poj2376
- rac中vip和san的作用
- StringBuffer避免文件多次写入
- [STAThread]的含义