【改了一天的拓扑排序】POJ 1094——Sorting It All Out
来源:互联网 发布:苏州网络推广公司 编辑:程序博客网 时间:2024/04/19 12:59
来源:点击打开链接
不知道怎么回事,wa了整整一天。。在绝望的时候AC了。
重点是分步处理和三种情况的判断。
1、判断是否成环,成环了直接输出错误信息。
2、然后一条边一条边的加入,进行拓扑排序,如果出度为0的点多于两个,继续判断之,如果到所有点都加入了但仍然没有判断出来,输出第三种情况。
3、以上两种情况都不存在,输出拓扑排序的路径信息。
#include <iostream>#include <cstring>#include <string>using namespace std;int mat[105][105];int ans[105];int indegree[105];int length,rela,tflag,loopflag;int TopoLogic(){ int loopcount=0;//0入度数统计 int entrypoint=0;//第几个检测到0入度,加入队列 int t=0; int flag=1; memset(indegree,0,sizeof(indegree)); for (int a=0;a<length;a++) //求目前图的入度 { for (int b=0;b<length;b++) { if (mat[a][b]) indegree[b]++; } } for (int i=0;i<length;i++) { loopcount=0; for (int j=0;j<length;j++) { if (indegree[j]==0) { loopcount++; entrypoint=j; } }if (loopcount>1) flag=-1; //出现多种情况,不好说 if (loopcount==0 && loopcount!=length)//第二个条件很容易忘 return 0; ans[t++]=entrypoint; indegree[entrypoint]=-1;//去点 for (int p=0;p<length;p++) { if (mat[entrypoint][p]==1) indegree[p]--; } } return flag;}int main(){ while (cin>>length>>rela) { if (length==0 && rela==0) break; memset(mat,0,sizeof(mat)); memset(indegree,0,sizeof(indegree)); tflag=0;//队列标志 string tar; for (int t=1;t<=rela;t++) { int resulter; cin>>tar; mat[tar[0]-'A'][tar[2]-'A']=1; memset(ans,0,sizeof(ans)); if (tflag==0) { resulter=TopoLogic(); //cout<<resulter<<endl; } if (resulter==1 && tflag==0) { cout<<"Sorted sequence determined after "<<t<<" relations: "; for (int a=0;a<length;a++) cout<<(char)(ans[a]+'A'); cout<<"."<<endl; tflag=1; } if(resulter==0 && tflag==0) { cout<<"Inconsistency found after "<<t<<" relations."<<endl; tflag=1; } } if(tflag==0) cout<<"Sorted sequence cannot be determined."<<endl; //全部判断完再输出矛盾!! } return 0;}
- 【改了一天的拓扑排序】POJ 1094——Sorting It All Out
- Poj 1094 Sorting It All Out——拓扑排序
- poj——1094——Sorting It All Out(拓扑排序)
- POJ 1094 Sorting It All Out ——拓扑排序(有点坑)
- POJ 1094 Sorting It All Out(拓扑排序)
- Poj 1094-Sorting It All Out [拓扑排序]
- POJ 1094-Sorting It All Out 拓扑排序
- zoj 1060 || poj 1094 Sorting It All Out(拓扑排序)
- POJ 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out (拓扑排序)
- POJ 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out(拓扑排序)
- poj 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out (拓扑排序)
- [Cocos2D-x官方文档]:解读CCString类
- 求两个数和为s,判断它是否在数组中存在,并且数组已经排好序
- Mac下配置PHP+MySql环境【生产环境】
- wince下载程序到核心板调试时出现磁盘空间不足的问题
- DFT与FFT
- 【改了一天的拓扑排序】POJ 1094——Sorting It All Out
- 文本数据处理之AWK 图解
- hdu-1040-As Easy As A+B
- WebService框架JWS、Axis2、XFire、CXF的区别
- ffplay程序运行流程分析
- test only
- Gabor 变换
- 低质量软件编程产生的成本价格细目表
- 杭电ACM2016题—数据的交换输出