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 }

你可能感兴趣的:(HDU)