別の投稿で、Python と networkX を使用して有向グラフ内のすべてのサイクルを簡単に見つける方法を説明する回答があります。有向グラフのすべてのサイクルを見つける
ソリューションは、有向グラフのすべてのサイクルを含むリストを出力します。
この出力を使用して、最長のサイクルを見つけることができます。以下に示します。
import networkx as nx
# Create Directed Graph
G=nx.DiGraph()
# Add a list of nodes:
G.add_nodes_from(["1","2","3","4","5","6","7","9"])
# Add a list of edges:
G.add_edges_from([("7","9"),("1","2"),("2","3"),("3","1"),("3","4"),("4","5"),("5","1"),("5","6"),("6","7"),("7","2")])
#Return a list of cycles described as a list o nodes
all_cycles = list(nx.simple_cycles(G))
#Find longest cycle
answer = []
longest_cycle_len = 0
for cycle in all_cycles:
cycle_len = len(cycle)
if cycle_len>longest_cycle_len:
answer =cycle
longest_cycle_len = cycle_len
print "Longest Cycle is {} with length {}.".format(answer,longest_cycle_len)
答え:最長サイクルは ['3', '4', '5', '6', '7', '2'] で、長さは 6 です。
面白いと思ったら、元の回答にも賛成票を投じてください。これは多くの答えを伴う古い議論であり、新しい解決策を生み出すのに役立ちます.