拓扑排序BFS
import java.util.*;
public class TopologicalSort {
public static List<Integer> kahnTopologicalSort(int n, List<List<Integer>> edges) {
int[] inDegree = new int[n];
List<List<Integer>> adjList = new ArrayList<>();
for (int i = 0; i < n; i++) {
adjList.add(new ArrayList<>());
}
for (List<Integer> edge : edges) {
int u = edge.get(0);
int v = edge.get(1);
adjList.get(u).add(v);
inDegree[v]++;
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < n; i++) {
if (inDegree[i] == 0) {
queue.offer(i);
}
}
List<Integer> result = new ArrayList<>();
while (!queue.isEmpty()) {
int u = queue.poll();
result.add(u);
for (int v : adjList.get(u)) {
inDegree[v]--;
if (inDegree[v] == 0) {
queue.offer(v);
}
}
}
if (result.size() != n) {
throw new RuntimeException("Graph contains a cycle, topological sort is not possible.");
}
return result;
}
public static void main(String[] args) {
int n = 6;
List<List<Integer>> edges = Arrays.asList(
Arrays.asList(0, 1),
Arrays.asList(1, 2),
Arrays.asList(3, 1),
Arrays.asList(4, 0),
Arrays.asList(4, 5)
);
List<Integer> sortedOrder = kahnTopologicalSort(n, edges);
System.out.println("Topological Sort Order: " + sortedOrder);
}
}