0
グラフを取ってトポロジカルに並べ替えるアルゴリズムを探しています。それぞれのリストには、トポロジカルなソートされた頂点が含まれています。トポロジカルなグラフをバケットに分解して分割したサブグラフを作成する
ノードが2つの異なるリスト内のノードに依存する場合、難しい部分はリストをマージしています。ここで
はグラフが{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')
フラッドフィルアルゴリズムは、有向グラフのサブグラフ全体をどのように識別できますか?始めるノードによっては、アルゴリズムがさらに上流のノードに到達しない場合があり、グラフが非循環の場合は絶対に行われません。 – shane
@shane有向グラフから無向グラフを作成し、フラッドフィルを行い、分割された元のグラフに戻り、トポロジカルな各部分グラフをトポロジカルにソートすることができます。 – btilly