poj 1094 DFS--》拓扑排序
来源:互联网 发布:radiohead 知乎 编辑:程序博客网 时间:2024/04/30 06:17
#include <stdio.h>#include <iostream>using namespace std;int n,m;int e[27][27];int cur,incons,color[27];char in[4],temp[27];void dfs(int k){ color[k]=1; int i; for(i=1;i<=n;i++){ if(e[k][i]&&color[i]==0) dfs(i); else if(e[k][i]&&color[i]==1) incons=1; } color[k]=2; temp[cur++]=k-1+'A';}int main(){ int i,j,found; while(cin>>n>>m&&n&&m){ memset(e,0,sizeof(e)); found=0; incons=0; for(i=1;i<=m;i++){ cin>>in; e[in[0]-'A'+1][in[2]-'A'+1]=1; if(!found&&!incons){ cur=0; memset(color,0,sizeof(color)); for(j=1;j<=n;j++) if(color[j]==0) dfs(j); temp[cur]='\0'; if(incons==1) incons=i; else{ int bb=1; for(j=cur-1;j>0;j--) if(!e[temp[j]-'A'+1][temp[j-1]-'A'+1]) { bb=0; break; } if(bb) found=i; } } } char tt; for(i=0,j=cur-1;i<j;i++,j--) //reverse the sorted sequence { tt=temp[i]; temp[i]=temp[j]; temp[j]=tt; } if(incons) printf("Inconsistency found after %d relations.\n",incons); else if(found) printf("Sorted sequence determined after %d relations: %s.\n",found,temp); else printf("Sorted sequence cannot be determined.\n"); } system("PAUSE"); return 0;}