hdu 1285

本文深入探讨了拓扑排序的基本概念、实现方法及在实际问题中的应用,通过一个具体的例子展示了裸地拓扑排序的过程,并提供了相应的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一个图论题,拓扑排序;

挺容易的,基本上就是一个裸地拓扑排序;

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int a[505][505],ans[505],cnt[505],n,m,x,y;
 5 
 6 void top_sort()
 7 {
 8     for(int i=1; i<=n; i++)
 9         for(int j=1; j<=n; j++)
10             if(a[i][j]==1)
11                 cnt[j]++;
12     for(int i=1; i<=n; i++)
13     {
14         int k=1;
15         while(cnt[k]!=0) k++;
16         ans[i]=k;
17         cnt[k]--;
18         for(int j=1; j<=n; j++)
19             if(a[k][j])
20                 cnt[j]--;
21     }
22 }
23 
24 int main()
25 {
26     while(scanf("%d%d",&n,&m)!=EOF)
27     {
28         memset(cnt,0,sizeof cnt);
29         memset(a,0,sizeof a);
30         memset(ans,0,sizeof ans);
31         for(int i=0; i<m; i++)
32         {
33             scanf("%d%d",&x,&y);
34             a[x][y]=1;
35         }
36         top_sort();
37         for(int i=1; i<n; i++)
38             printf("%d ",ans[i]);
39         printf("%d\n",ans[n]);
40     }
41     return 0;
42 }
View Code

 

转载于:https://www.cnblogs.com/yours1103/p/3293318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值