グラフ内のすべてのサイクルを見つける簡単なアルゴリズムを見つけましたhere。私もサイクルを印刷する必要があります、それはこのアルゴリズムで可能です。以下のコードを見つけてください。グラフのすべてのサイクルを見つける
サイクル数が正しく表示されています。
node1、node2は整数です。訪問された辞書は
def dfs(self,node1, node2):
if self.visited[node2]:
if(node1 == node2):
self.count += 1
print node2
return
self.visited[node2] = True
for x in self.adj_lst[node2-1]:
self.dfs(node1, x)
self.visited[node2] = False
def allCycles(self):
self.count = 0
for x in self.VList:
self.dfs(x.num, x.num)
self.visited[x.num] = True
print "Number of cycles: "+str(self.count)
ここでは、頂点の親子のことはしません。それらは単なる整数です。すべてのエッジはEListのタプルとして保存されます。それはまだ可能ですか? –
ああ、私は各頂点の隣接リストを持っています。どのように印刷用に使用できますか? –
@KalyanChavali dfs内のエッジによってvからuに行くときに、追加の配列(リスト、マップ) 'parent'を作成し、parent [u] = vを割り当てることができます。 – kraskevich