graph-topological-sort

本文最后更新于:2022年5月20日 晚上

摘要:AOV简介,拓扑排序的思路及实现

AOV网(Activity On Vertex Network)

在一个表示工程的有向图中,用顶点表示活动(Activity),用有向边表示活动之间的先后顺序,AOV网中不能出现环。

拓扑排序

拓扑排序是对有向无环图的顶点的一种排序,使得如果存在一条从vi到vj的路径,那么排序中vj就出现在vi的后面

思路:

  • 从任意一个入度为0的顶点开始,将这个顶点及从这个顶点出发的边删除
  • 重复上述操作,直到找不到入度为0的顶点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public List<K> topologicalSort() {
List<K> list = new ArrayList<>();

Queue<Vertex<K, E>> zeroInDegreeQueue = new LinkedList<>();
Map<Vertex<K, E>, Integer> inMap = new HashMap<>();
vertices.forEach((k, v) -> {
if (v.inEdges.size() == 0) {
zeroInDegreeQueue.offer(v);
} else {
inMap.put(v, v.inEdges.size());
}
});

while (!zeroInDegreeQueue.isEmpty()) {
Vertex<K, E> vertex = zeroInDegreeQueue.poll();
list.add(vertex.key);
vertex.outEdges.forEach(edge -> {
inMap.put(edge.to, inMap.get(edge.to) - 1);
if (inMap.get(edge.to) == 0) {
zeroInDegreeQueue.offer(edge.to);
}
});
}
return list;
}

graph-topological-sort
https://shgang97.github.io/posts/graph-topological-sort-3e4db9b0d660/
作者
shgang
发布于
2022年5月20日
更新于
2022年5月20日
许可协议