HDU 4324 Triangle LOVE(拓扑排序)

题目链接

有结论。。在有向图中,每两个点都存在一条边,如果存在环,则一定存在3元环。拓扑排序一下。

 1 #include <stdio.h>
 2 #include <string.h>
 3 char str[2001][2001];
 4 int o1[2001],o2[2001],k[2001];
 5 int main()
 6 {
 7     int t,i,j,num = 0,n,z,nu;
 8     scanf("%d",&t);
 9     while(t--)
10     {
11         num ++;
12         memset(k,0,sizeof(k));
13         memset(o1,0,sizeof(o1));
14         memset(o2,0,sizeof(o2));
15         scanf("%d%*c",&n);
16         for(i = 0; i <= n-1; i ++)
17             gets(str[i]);
18         for(i = 0; i <= n-1; i ++)
19         {
20             for(j = 0; j <= n-1; j ++)
21             {
22                 if(str[i][j] == '1')
23                 {
24                     o1[i] ++;
25                     o2[j] ++;
26                 }
27             }
28         }
29         nu = 0;
30         for(;;)
31         {
32             z = 0;
33             for(i = 0; i <= n-1; i ++)
34             {
35                 if(o2[i] == 0&&!k[i])
36                 {
37                     k[i] = 1;
38                     z = 1;
39                     nu ++;
40                     for(j = 0;j <= n-1;j ++)
41                     {
42                         if(str[i][j] == '1'&&!k[j])
43                         {
44                            o2[j] --;
45                         }
46                     }
47                 }
48             }
49             if(nu == n) break;
50             if(!z) break;
51         }
52         if(nu == n)
53         z = 0;
54         else
55         z = 1;
56         printf("Case #%d: ",num);
57         if(z)
58             printf("Yes\n");
59         else
60             printf("No\n");
61     }
62     return 0;
63 }
posted @ 2012-08-23 11:49  Naix_x  阅读(164)  评论(0编辑  收藏  举报