package graph.topoSort;
import java.util.Scanner;
import java.util.Stack;
public class TopoSort {
static final int maxn = 105;
static int map[][] = new int[maxn][maxn];
static int indegree[] = new int[maxn];
static int topo[] = new int[maxn];
static int n, m;
static Stack<Integer> s = new Stack<>();
static boolean TopoSort() { // 拓扑排序
int cnt = 0;
for (int i = 0; i < n; i++)
if (indegree[i] == 0)
s.push(i);
while (!s.empty()) {
int u = s.peek();
s.pop();
topo[cnt++] = u;
for (int j = 0; j < n; j++)
if (map[u][j] == 1)
if (--indegree[j] == 0)
s.push(j);
}
if (cnt < n) {
return false;
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
for (int i = 0; i < m; i++) {
int u, v;
u = scanner.nextInt();
v = scanner.nextInt();
map[u][v] = 1;
indegree[v]++;
}
TopoSort();
for (int i = 0; i < n - 1; i++)
System.out.print(topo[i] + " ");
System.out.println(topo[n - 1]);
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/125811852
内容来源于网络,如有侵权,请联系作者删除!