📅  最后修改于: 2023-12-03 15:27:11.081000             🧑  作者: Mango
拓扑排序是一种重要的图论算法,用于将有向无环图(DAG)的节点进行排序。该算法常常被应用于任务调度、依赖关系分析等领域。本文介绍一款用于拓扑排序的Java程序,可以方便地对DAG进行排序。
下面是一个用Java实现拓扑排序的代码段:
import java.util.*;
public class TopologicalSort {
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] inDegrees = new int[numCourses];
List<Integer>[] adj = new ArrayList[numCourses];
for (int i = 0; i < numCourses; i++) {
adj[i] = new ArrayList<Integer>();
}
for (int[] edge : prerequisites) {
inDegrees[edge[0]]++;
adj[edge[1]].add(edge[0]);
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < numCourses; i++) {
if (inDegrees[i] == 0) {
queue.offer(i);
}
}
int[] res = new int[numCourses];
int index = 0;
while (!queue.isEmpty()) {
int cur = queue.poll();
res[index++] = cur;
for (int neighbor : adj[cur]) {
inDegrees[neighbor]--;
if (inDegrees[neighbor] == 0) {
queue.offer(neighbor);
}
}
}
return index == numCourses ? res : new int[0];
}
}
以下是一个示例程序,使用上述拓扑排序算法对给定的有向无环图进行排序:
public class Main {
public static void main(String[] args) {
int numCourses = 4;
int[][] prerequisites = {{1,0},{2,0},{3,1},{3,2}};
TopologicalSort ts = new TopologicalSort();
int[] res = ts.findOrder(numCourses, prerequisites);
System.out.println(Arrays.toString(res));
}
}
输出:
[0, 1, 2, 3]
本文介绍了一款用于拓扑排序的Java程序。通过对每个节点的入度进行记录,并使用队列进行遍历,可以高效地进行排序。建议开发者可以更详细地了解该算法的实现原理,在实际应用中加以运用。