HDU 1285 确定比赛名次(拓扑排序)

题目链接

这是拓扑排序? 我很纳闷。。有重边WA了N次。。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int p[501][501],o[501],n,k[501],z;
 4 void dfs()
 5 {
 6     int i,j,nu = 1;
 7     while(nu <= n)
 8     {
 9         if(i == n+1)
10         break;
11         for(i = 1; i <= n; i ++)
12         {
13             if(o[i] == 0&&!k[i])
14             {
15                 k[i] = 1;
16                 if(z)
17                     printf(" %d",i);
18                 else
19                 {
20                     z = 1;
21                     printf("%d",i);
22                 }
23                 for(j = 1; j <= n; j ++)
24                 {
25                     if(p[i][j]&&!k[j])
26                         o[j] --;
27                 }
28                 break;
29             }
30         }
31     }
32 }
33 int main()
34 {
35     int i,m,sv,ev;
36     while(scanf("%d%d",&n,&m)!=EOF)
37     {
38         z = 0;
39         memset(p,0,sizeof(p));
40         memset(o,0,sizeof(o));
41         memset(k,0,sizeof(k));
42         for(i = 1;i <= m; i ++)
43         {
44             scanf("%d%d",&sv,&ev);
45             if(p[sv][ev] == 0)
46             {
47                 p[sv][ev] = 1;
48                 o[ev] ++;
49             }
50         }
51         dfs();
52         printf("\n");
53     }
54     return 0;
55 }
posted @ 2012-08-02 10:57  Naix_x  阅读(162)  评论(0编辑  收藏  举报