拓扑排序

输入:一个有向图

输出:顶点的拓扑序列


 

具体流程:

(1) 将所有入度为0的点加入队列

(2) 每次取出队首顶点

(3) 删除其连出的边,检查是否有新的入度为0的顶点,有则加入队列

(4) 重复(2)直到队列为空


样例输入

5 5
0 1 1
0 2 1
1 2 1
2 3 1
4 2 1


样例输出


0 4 1 2 3



复制代码
 1 #include <iostream>
 2 #include <queue>
 3 using namespace std;
 4 
 5 int ** edges;
 6 int * in_degrees;
 7 int * out_degrees;
 8 int v,e;
 9 
10 void topSort(){
11     queue<int> q;
12     for(int i=0;i<v;i++){
13         if(0 == in_degrees[i]){
14             q.push(i);
15         }
16     }
17     while(!q.empty()){
18         int front = q.front();
19         q.pop();
20         printf("%d ",front);
21         for(int j=0;j<v;j++){
22             if(edges[front][j]!=0){
23                 edges[front][j] = 0;
24                 in_degrees[j]--;
25                 if(0 == in_degrees[j]){
26                     q.push(j);
27                 }
28             }
29         }
30         
31     }
32 }
33 
34 int main(void){
35     cin>>v>>e;
36     //init
37     edges = new int*[v];
38     in_degrees = new int[v];
39     out_degrees = new int[v];
40     memset(in_degrees,0,v*sizeof(int));
41     memset(out_degrees,0,v*sizeof(int));
42     int i;
43     for(i=0;i<v;i++){
44         edges[i] = new int[v];
45         memset(edges[i],0,v*sizeof(int));
46     }
47     
48 
49 
50     //input
51     for(i=0;i<e;i++){
52         int a,b,w;
53         cin>>a>>b>>w;
54         edges[a][b] = w;        //从a到b有一条路
55         in_degrees[b]++;        //b的入度加1
56         out_degrees[a]++;        //a的出度加1
57     }
58 
59     topSort();
60 
61     //huishou
62     for(i=0;i<v;i++){
63         delete edges[i];
64     }
65     delete edges;
66     delete in_degrees;
67     delete out_degrees;
68     return 0;
69 }
复制代码

 



 

posted @   lvyahui  阅读(191)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示