POJ 1094 Sorting It All Out
来源:互联网 发布:unity3d摄像机位置 编辑:程序博客网 时间:2024/05/16 11:04
这个题的题意是这样的:
给定有向边,问在输入地几个边的时候出现了确定的拓扑序列或者环,如果输入完所有边还没有结果则输出 “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
- [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
- php 获取时间今天明天昨天时间戳
- uva 10054
- git 获取android源码各分支资源
- 【程序员的自我修养】第5章 Windows PE/COFF
- select,epoll,poll比较
- POJ 1094 Sorting It All Out
- 【程序员的自我修养】第6章 可执行文件的装载与进程
- Android之TabHost的创建
- 一个GCC4.6.3的奇妙问题的糊涂解决方案
- php验证码类(很漂亮、实用)
- 孙其功陪你学之——gluPerspective();glMatrixMode();glLoadIdentity():函数
- sql
- C语言之堆栈
- oracle 在线重定义实验-对表进行分区