POJ 1094 Sort it all out (Topsort)
来源:互联网 发布:在线编程 python 编辑:程序博客网 时间:2024/05/16 23:40
题目大意:
给定一些大写字母之间的关系,去判断能否唯一确定他们之间的关系,也就是按照大小排列的序列,或者所给的关系中有相互矛盾的部分,或者不能判断他们之间的唯一关系(即按照所给信息,可能的关系不唯一)。
题目分析:
此题和士兵排队类似,是典型的拓扑排序(topsort)来实现。
Topsort:1.可以利用栈来解决,每次入栈的是入度为0的节点。
2.拓扑排序的答案:①可以判断。②出现了矛盾(有环)③条件不足无法判断。
(鉴于judge有些略坑)对于答案的输出,当 前两种出现时,直接输出,当前两种都不出现时,输出第三种。
有关代码简介:(1):对于可以确定关系的,必须满足在建立的图中,有且只有一个入度为零的点,但允许子图有多个无前驱的点。
(2):一旦形成环,则证明所给关系中有矛盾的。
(3):在全部输入完成,且前两种情况都尚未发生时,我们进行判断。
1、图中字母是全的,但是有多个无前驱的点。
2、图中字母残缺。
如下代码:
#include<cstdio>#include<cstring>#include<iostream>#include<stack>#define N 27using namespace std;int n,m;int graph[N][N],indegree[N],list[N];int topsort(int n){int in[N];memcpy(in,indegree,sizeof(indegree));stack<int> s;//我们可以利用栈来维护int i;for(int i=0;i<n;i++)if(!in[i])//入度为零加入栈s.push(i);bool flag=false;int t,j=0;while(!s.empty()){if(s.size()>1)flag=true;t=s.top();s.pop();list[j++]=t;//记录for(int i=0;i<n;i++) if(graph[t][i]) if(--in[i]==0)//入度为1 s.push(i);}if(j!=n)return 1;else if(flag==true)return 2;return 0;}int main(){int deter,incon;int i,j;char a,b;while(scanf("%d%d",&n,&m)&&n&&m){getchar();deter=0,incon=0;memset(graph,0,sizeof(graph));memset(indegree,0,sizeof(indegree));for(int i=1;i<=m;i++){scanf("%c<%c",&a,&b);getchar();if(!deter&&!incon){if(graph[b-'A'][a-'A']==1){incon=1;printf("Inconsistency found after %d relations.\n",i);continue;}if(graph[a-'A'][b-'A']==0){graph[a-'A'][b-'A']=1;indegree[b-'A']++;}int res=topsort(n);if(res==0){printf("Sorted sequence determined after %d relations: ",i);for(int j=0;j<n;j++)printf("%c",list[j]+'A');printf(".\n");deter=1;}else if(res==1){printf("Inconsistency found after %d relations.\n",i);incon=1;}}}if(!deter&&!incon)printf("Sorted sequence cannot be determined.\n");}//while(1);return 0;}
0 0
- POJ 1094 Sort it all out (Topsort)
- POJ 1094 Sorting It All Out(topsort Language: Sorting It All Out Time Limit: 1000MSMemory Limit: )
- POJ 1094 Sortint 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
- 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
- hdu 1251 统计难题
- flex 存cookie ,session
- OC继承
- HDU2896 病毒侵袭 AC自动机
- MySql 5.6.20 安装 使用
- POJ 1094 Sort it all out (Topsort)
- Oracle 11g必须开启的服务及服务详细介绍
- s:Form间距设置
- Android:EditText屏蔽输入法弹窗
- hdu4920 Matrix multiplication
- javaWeb初学记录
- CTS测试方法
- as getRect(),getBounds()
- mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations配置映射文件时的区别