1 #include<stdio.h> 2 #include<string.h> 3 bool map[30][30]; 4 int in[30],sort[30]; 5 int n,m,t; 6 bool f1,f2; 7 void solve(){ 8 int i,j,k,loc; 9 int temp[30]; 10 bool f=0; 11 for(i=0;i<n;i++) 12 temp[i]=in[i]; 13 for(t=i=0;i<n;i++){ 14 for(k=j=0;j<n;j++) 15 if(!temp[j]){ 16 k++; 17 loc=j; 18 } 19 if(k==0){ 20 f2=1; 21 return; 22 } 23 if(k>1) f=1; 24 sort[t++]=loc; 25 temp[loc]=-1; 26 for(j=0;j<n;j++) 27 if(map[loc][j]) 28 temp[j]--; 29 30 } 31 if(!f) f1=1; 32 } 33 int main() 34 { 35 int i,p; 36 char a,b; 37 while(scanf("%d%d",&n,&m),n||m){ 38 memset(map,0,sizeof(map)); 39 memset(in,0,sizeof(in)); 40 for(f1=f2=t=i=0;i<m;i++){ 41 scanf("%*c%c<%c",&a,&b); 42 if(!f1&&!f2){ 43 map[a-'A'][b-'A']=1; 44 in[b-'A']++; 45 solve(); 46 p=i+1; 47 } 48 } 49 if(f1){ 50 printf("Sorted sequence determined after %d relations: ",p); 51 for(i=0;i<t;i++) 52 printf("%c",sort[i]+'A'); 53 puts("."); 54 }else if(f2){ 55 printf("Inconsistency found after %d relations.\n",p); 56 57 }else puts("Sorted sequence cannot be determined."); 58 } 59 return 0;
//一道典型的拓扑排序的题目,纠结了好长时间!!
转载于:https://www.cnblogs.com/shihuajie/archive/2013/04/25/3043683.html