http://poj.org/problem?id=1094
1.判断所给关系是否为合法的拓扑序列,若存在环,输出
"Inconsistency found after %d relations."但仍继续输入。
2.判断是否可以确定序列,若不可以确定,继续输入,若可以确定输出
"Sorted sequence determined after %d relations: %s."后,继续输入数据。
3.若输入完数据仍不可以确定序列,输出"Sorted sequence cannot be determined.".
1 #include<stdio.h> 2 #include<string.h> 3 const int N=102; 4 int map[N][N],in[N],vis[N]; 5 int n,m,flag,top; 6 char s[N]; 7 void topo() 8 { 9 int cnt,i,j,pos; 10 top = 0; 11 int d[N];//存每个点的度数 12 flag = 1; 13 memset(vis,0,sizeof(vis)); 14 memcpy(d,in,n*sizeof(int)); 15 for (i = 0; i < n; i ++) 16 { 17 cnt = 0; 18 for (j = 0; j < n; j ++) 19 { 20 if (d[j]==0) 21 { 22 cnt++; 23 pos = j; 24 } 25 } 26 if (cnt==0)//存在环 27 { 28 flag = 0; 29 return ; 30 } 31 if (cnt > 1)//不确定序列 32 { 33 flag = 2; 34 } 35 --d[pos]; 36 s[top++] = pos+'A'; 37 for (int k = 0; k < n; k ++) 38 { 39 if(map[pos][k]==1) 40 --d[k];//更新度数 41 } 42 } 43 s[top++] = '