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;}


原创粉丝点击