首页 > 编程语言 > 详细

拓扑排序

时间:2020-04-16 20:13:08      阅读:64      评论:0      收藏:0      [点我收藏+]

  拓扑排序就是获得一个拓扑序的过程。而拓扑序就是在图中,如果V到W有一条有向路径,那么V一定排在W前面,符合这个特点的一个顶点序列叫做拓扑序。

技术分享图片
 1 #include <stdio.h>
 2 
 3 #define maxSize 105
 4 #define inf 0x7ffffff
 5 
 6 int v, e;
 7 
 8 int EDGE[maxSize][maxSize], inDegree[maxSize], visited[maxSize];
 9 
10 void topSort(void);
11 void initialize(void);
12 
13 int main() {
14     scanf("%d %d", &v, &e);
15 
16     initialize();
17 
18     int i;
19     for (i = 0; i < e; ++i) {
20         int from, to, weight;
21         scanf("%d %d %d", &from, &to, &weight);
22         EDGE[from][to] = weight;
23         ++inDegree[to];
24     }
25 
26     topSort();
27 
28     return 0;
29 }
30 
31 void topSort(void) {
32     int queue[maxSize] = {0}, head = -1, tail = 0;
33 
34     int i;
35     for (i = 0; i < v; ++i) {
36         if (!visited[i] && !inDegree[i]) {
37             head = 0;
38             queue[tail++] = i;
39             visited[i] = 1;
40         }
41     }
42     if (head < 0) {
43         printf("Impossible\n");
44         return ;
45     }
46 
47     while (head < tail) {
48         int t = queue[head++];
49         for (i = 0; i < v; ++i) {
50             if (!visited[i] && EDGE[t][i] < inf) {
51                 --inDegree[i];
52                 if (inDegree[i] == 0) {
53                     queue[tail++] = i;
54                     visited[i] = 1;
55                 }
56             }
57         }
58     }
59 
60     if (tail < v) {
61         printf("Impossible\n");
62     }
63     else {
64         for (i = 0; i < v; ++i) {
65             printf("%d ", queue[i]);
66         }
67         printf("\n");
68     }
69 }
70 
71 void initialize(void) {
72     int i, j;
73     for (i = 0; i < v; ++i) {
74         for (j = 0; j < v; ++j) {
75             if (i == j) {
76                 EDGE[i][j] = 0;
77             }
78             else {
79                 EDGE[i][j] = inf;
80             }
81         }
82     }
83 }
拓扑排序

 

拓扑排序

原文:https://www.cnblogs.com/zymmyz/p/12715134.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!