题意:
给你n个人的喜欢关系,判断是否有环出现。。。
拓扑经典题。。。
#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==1)printf("No\n");
else printf("Yes\n");
}
return 0;
}