分析:
看是否有A喜欢B,B喜欢C,C喜欢A的情况。。
用深搜或拓扑就可以。。。。
用拓扑的话,只要能排除序就说明没有,反之就有。
刚开始,数组开小了RE,之后有发现把no和yes判断那写错了。。
#include"stdio.h"
#include"string.h"
char map[2001][2001];
int outdegree[2001];
int topsort(int n)
{
int i,j,k;
k=0;
while(k<n)
{
for(i=0;i<n;i++)
{
if(outdegree[i]==0)
{
outdegree[i]--;
k++;
for(j=0;j<n;j++)
if(map[i][j]=='1')outdegree[j]--;
break;
}
}
if(i>=n)return 0;
}
return 1;
}
int main()
{
int T;
int n;
int cnt;
int i,j,k;
scanf("%d",&T);
k=0;
while(T--)
{
scanf("%d",&n);
getchar();
memset(outdegree,0,sizeof(outdegree));
for(i=0;i<n;i++)
{
gets(map[i]);
for(j=0;j<n;j++)
{
if(map[i][j]=='1')
outdegree[j]++;
}
}
int ans=topsort(n);
printf("Case #%d: ",++k);
if(ans!=0)printf("No\n");
else printf("Yes\n");
}
return 0;
}