现在的位置: 首页 > 综合 > 正文

hdu 4324

2018年12月30日 ⁄ 综合 ⁄ 共 667字 ⁄ 字号 评论关闭

判断是否存在a—>b,b—>c,c—>a这样环的关系,用拓扑排序很好解决

#include<iostream>
#include<stdio.h>
#include<stack>
using namespace std;
int n,link[2010];
char map[2010][2010];
int tuopusort()
{
    int num=0;
    stack<int>q;
    for(int i=0;i<n;i++)
        if(link[i]==0)
            q.push(i);
        while(!q.empty())
        {
            int u=q.top();
            q.pop();
            num++;
            for(i=0;i<n;i++)
            {
                if(map[u][i]=='0')continue;
                if(--link[i]==0)
                    q.push(i);
            }
        }
        if(num==n)return 0;
        else return 1;
}
int main()
{
    int i,j,t,op=1;
    scanf("%d",&t);
    while(t--)
    {
        memset(map,0,sizeof(map));
        memset(link,0,sizeof(link));
        scanf("%d",&n);
        getchar();
        for(i=0;i<n;i++)
        {
                 gets(map[i]);
                for(j=0;j<n;j++)
                {
                    if(map[i][j]=='1')
                    link[j]++;
                }
            }
            j=tuopusort();
            if(j==1)printf("Case #%d: Yes\n",op);
               else printf("Case #%d: No\n",op);
               op++;
    }
    return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.