3 4 4 A B A C B C C D 4 4 A B A C B D C D 3 3 A B B A A C
ABCD No Answer No Answer
#include<cstdio> #include<cstdlib> #include<cstring> using namespace std; int map[110][110],is[110],n,count; char ans[110]; int topo(){ int e,i,j=0,temp=0,u=0; for(e=0;e<n;++e){ temp=0;u=0; for(i=0;i<n;++i) if(is[i]==0){ temp++;u=i; } if(temp>=2||temp==0)return 0; ans[j++]=u+'A'; is[u]=-1; for(int k=0;k<n;k++) if(map[u][k]==1){ map[u][k]=0; is[k]--; } } ans[j]='\0'; return 1; } int main() { int k,i; char a,b; scanf("%d",&k); while(k--){ scanf("%d%d",&n,&count); memset(map,0,sizeof(map)); memset(is,0,sizeof(is)); getchar(); for(i=0;i<count;++i){ scanf("%c %c",&a,&b); getchar(); map[a-'A'][b-'A']=1; is[b-'A']++; } topo()?printf("%s\n",ans):printf("No Answer\n"); } return 0; }
原文:http://blog.csdn.net/r1986799047/article/details/42610095