#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;
}
poj 1094 DFS--》拓扑排序
最新推荐文章于 2021-10-09 22:09:34 发布