hdu 4324 (拓扑排序)

来源:互联网 发布:机构持仓数据查询 编辑:程序博客网 时间:2024/06/05 17:48

点击打开链接


分析:

看是否有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;}