あなたは、2段階のプロセスでこれを行う最初の接続ノードにノードのグラフにエッジのリストに変換することができ:
In []:
graph = {}
for edge in inpt:
for n1, n2 in edge.items():
graph.setdefault(n1, []).append(n2)
graph
Out[]
{1: [2, 3], 2: [3], 3: [4, 5]}
注:隠し変数名としてinput
を使いません
:Pythonのinput()
組み込みは、その後、それはあなたが探しているのパスを取得するために再帰関数を作成するには合理的に簡単ですが、ここではグラフを取り、ノードを開始し、そのノードからのパスを返す再帰関数です
In []:
def paths(graph, nodes):
if not nodes:
return None
return {node: paths(graph, graph.get(node, [])) for node in nodes}
paths(graph, [1])
Out[]
{1: {2: {3: {4: None, 5: None}}, 3: {4: None, 5: None}}}
注:あなたの期待出力が有効辞書
されていないか、またはあなたが繰り返しキュー使ってこれを行うことができます。
In []:
def paths(graph, start):
p = {}
q = [(start, p, set())]
while q:
node, c, visited = q.pop()
if node not in graph or node in visited:
c[node] = None
continue
visited = visited | {node}
for n in graph[node]:
q.append((n, c.setdefault(node, {}), visited))
return p
paths(graph, 1)
Out[]:
{1: {2: {3: {4: None, 5: None}}, 3: {4: None, 5: None}}}
注:これは有向非循環的な必要としグラフが表示されたり、Pythonが失敗するまで再帰します。回避するには追加のチェックが必要です。
あなたはもっと文脈を与えることができますか?このデータはどこから来ていますか? –
入力を使用してグラフを作成します。各キー値ペアはエッジを表します。グラフのDFSトラバーサルは、必要な出力です。 –
@PauloScardine私はデータを作成し、必要に応じて変更することができます。データはすべて実行時に利用可能であり、一連の指示された教師 - >学生関係が記述されていますが、サイクリックです。 @_ÓscarLópez私はこれが行く方法だと思います。私が目を覚ますとき、私はこれを行かせます。 – duhaime