POJ 1094 Sorting It All Out
2013-08-09 09:10
323 查看
这个题的题意是这样的:
给定有向边,问在输入地几个边的时候出现了确定的拓扑序列或者环,如果输入完所有边还没有结果则输出 “Sorted sequence cannot be determined.” 。
这里需要注意的是:
1、有环和有确定的拓扑序列谁先出现输出谁。
2、注意记录是在哪一个边输入之后出现的。
3、如果出现有环或有确定的拓扑序列之后边还没输入完则需要输入完所有边再输出。
下面是我的代码:
给定有向边,问在输入地几个边的时候出现了确定的拓扑序列或者环,如果输入完所有边还没有结果则输出 “Sorted sequence cannot be determined.” 。
这里需要注意的是:
1、有环和有确定的拓扑序列谁先出现输出谁。
2、注意记录是在哪一个边输入之后出现的。
3、如果出现有环或有确定的拓扑序列之后边还没输入完则需要输入完所有边再输出。
下面是我的代码:
#include <stdio.h> #include <string.h> const int M=30; int n,m,dis[M],cut,head[M],biao[M][M]; char c1[30]; int topo(int r) { int i,in=-1,ind,inde=0,di[M],flat=1; for(i=0; i<n; i++) { di[i]=dis[i]; } for(i=0; i<n; i++) { if(in!=-1&&di[i]==0) { flat=0; break; } if(di[i]==0) { di[i]=-1; in=i; r--; } } c1[inde]=in+'A'; inde++; while(1) { ind=-1; for(i=0; i<head[in]; i++) { di[biao[in][i]]--; if(ind!=-1&&di[biao[in][i]]==0) { flat=0; } if(di[biao[in][i]]==0&&ind==-1) { ind=biao[in][i]; di[biao[in][i]]=-1; r--; } } if(ind==-1) { for(i=0; i<n; i++) { if(di[i]==0) { di[i]=-1; ind=i; r--; break; } } if(ind==-1) { break; } } else { c1[inde]=ind+'A'; inde++; } in=ind; } if(r) { return 1; } else if(flat) { c1[inde]='\0'; return -1; } else { return 0; } } int main() { while(scanf("%d%d",&n,&m),n||m) { memset(dis,-1,sizeof(dis)); memset(head,0,sizeof(head)); cut=0; char s[5]; int a,b,c=2,d,i,j; for(i=0; i<m; i++) { scanf("%s",s); a=s[0]-'A'; b=s[2]-'A'; if(dis[a]==-1) { dis[a]=0; cut++; } if(dis[b]==-1) { dis[b]=1; cut++; } else { dis[b]++; } biao[a][head[a]]=b; head[a]++; c=topo(cut); if(c==-1&&cut==n) { d=i; for(i++; i<m; i++) { scanf("%s",s); } break; } else if(c==1) { d=i; for(i++; i<m; i++) { scanf("%s",s); } break; } } d++; if(c==-1&&cut==n) { printf("Sorted sequence determined after %d relations: %s.\n",d,c1); } else if(c==1) { printf("Inconsistency found after %d relations.\n",d); } else { printf("Sorted sequence cannot be determined.\n"); } } return 0; }
相关文章推荐
- 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(java + 拓扑排序)
- POJ-1094-Sorting It All Out
- poj 1094 Sorting It All Out
- HOJ 1336 POJ 1094 Sorting It All Out
- poj-1094 Sorting It All Out
- poj 1094 Sorting It All Out
- POJ 1094 Sorting It All Out
- poj1094 Sorting It All Out
- POJ 1094 Sorting It All Out
- poj 1094 Sorting It All Out
- poj 1094 Sorting It All Out
- poj1094 Sorting It All Out
- POJ 1094 Sorting It All Out