拓扑排序模版hdu 1285 确定比赛名次

1 #include <stdio.h>
 2 #include <string.h>
 3 int count,n,degree[505],map[505][505],vis[505],res[505];
 4 
 5 void topo(int x)
 6 {
 7  res[count] = x;
 8     count++;
 9     int i;
10     for(i = 1;i <= n;i++)
11     {
12         if(map[x][i] && !vis[i])
13        degree[i]--;
14     }
15 }
16 
17 int main()
18 {
19     int a,b,m,i;
20     while(~scanf("%d %d",&n,&m))
21     {
22         memset(map,0,sizeof(map));
23         memset(degree,0,sizeof(degree));
24         memset(vis,0,sizeof(vis));
25         for(i = 0;i < m;i++)
26         {
27             scanf("%d %d",&a,&b);
28             if(map[a][b] == 0)
29    {
30     map[a][b] = 1;
31     degree[b]++;
32    }
33         }
34         count = 0;
35         while(count < n)
36         {
37             for(i = 1;i <= n;i++)
38             {
39                 if(!vis[i] && !degree[i])
40                 {
41                     topo(i);
42                     vis[i] = 1;
43                     break;
44                 }
45             }
46         }
47         for(i = 0;i < n-1;i++)
48    printf("%d ",res[i]);
49         printf("%d\n",res[i]);
50     }
51  return 0;
52 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣华富贵8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值