I am looking for an algorithm which can take a graph and topologically sort it such that it produces a set of lists, each which contains the topologically sorted vertices of a disjoint subgraph.
The difficult part is merging the lists when a node depends on a node in two different lists.
Here is my incomplete code/pseudocode where graph is a dict {node: [node, node, ...]}
sorted_subgraphs = []
while graph:
cyclic = True
for node, edges in list(graph.items()):
for edge in edges:
if edge in graph:
break
else:
del graph[node]
cyclic = False
sub_sorted = []
for edge in edges:
bucket.extend(...) # Get the list with edge in it, and remove it from sorted_subgraphs
bucket.append(node)
sorted_subgraphs.append(bucket)
if cyclic:
raise Exception('Cyclic graph')
首先使用泛洪填充算法将其划分为不相交的子图,然后对每个图进行拓扑排序。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.