HDU 1285 确定比赛名次

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1285

图论    最简单的拓扑排序 寻找入度为0的点删掉 然后让跟它相连的点入度减一

View Code
 1 #include<stdio.h>

 2 #include<string.h>

 3 #include<stdlib.h>

 4 int map[501][501],topp[501],inde[501];

 5 void toppsort(int n)

 6 {

 7     int i,j,k;

 8     for(i=1;i<=n;i++)

 9     {

10         for(j=1;j<=n;j++)

11         {

12             if(inde[j]==0)

13             {

14                 inde[j]--;

15                 topp[i]=j;

16                 for(k=1;k<=n;k++)

17                 {

18                     if(map[j][k])

19                     inde[k]--;

20                 }break;

21 

22             }

23         }

24     }

25 }

26 int main()

27 {

28   int n,m,i,j,a,b;

29   while(scanf("%d%d",&n,&m)!=EOF)

30   {

31       memset(map,0,sizeof(map));

32       memset(inde,0,sizeof(inde));

33       for(i=1;i<=m;i++)

34       {

35           scanf("%d%d",&a,&b);

36           if(!map[a][b])

37           {

38              map[a][b]=1;

39              inde[b]++;

40           }

41       }

42       toppsort(n);

43       for(i=1;i<n;i++)

44       {

45           printf("%d ",topp[i]);

46       }

47       printf("%d\n",topp[n]);

48   }

49   return 0;

50 }

你可能感兴趣的:(HDU)