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 }
posted @ 2012-08-03 20:48  时光旅行的懒猫  阅读(157)  评论(0编辑  收藏  举报