これは私がグラフ内の他のノードにルートノードからのすべての最短経路を印刷することを思い付いたBFSアルゴリズムである:最大深さを有する実装BFSアルゴリズムとそのすべての最短経路を印刷
d = deque()
d.append(root)
level = 0
while len(d) >= 0 and level <= max_depth:
u = d.popleft()
print(adjacency_list[u])
for v in adjacency_list[u]:
if visited[v] == 'N':
if nodes2distances[u] + 1 <= nodes2distances[v]:
nodes2distances[v] = nodes2distances[u] + 1
node2parents[v].append(u)
d.extend(v)
level += 1
visited[u] = 'Y'
上記のコードは、最大レベルの条件を指定しないとうまく動作しますが、このアルゴリズムを実行するたびに出力が変化します。
1)レベル制限(つまり最大レベルの指定)でこのアルゴリズムを実装する方法を説明できますか?
2)また、私が問題を解決するために取ったアプローチが改善できるかどうか教えてください。
編集: 申し訳ありませんが、私は前にそれをやっていませんでした! 私は、重み付けされていないグラフに以下のエッジがあるとします:
( 'A'、 'B')、( 'B'、 'C')、( 'B '、' D '、' D '、' D '、' F '、' D '、' G '、' E '、' F ' 」、 'B ' F' iのノードためのアルゴリズムを呼び出すときの深さの制限なしに私のコードを実行した後)
が、私は次の出力を得る' を、
[('A', ['B']), ('C', ['B']), ('D', ['B']), ('E', ['D']), ('F', ['D']), ('G', ['D'])]
しかし、ときに私レベル制限2の同じ関数、つまりを呼び出します、期待される出力が間違った場所で
[('A', ['B']), ('C', ['B']), ('D', ['B']),('E',['D']),('F', ['D']),('G',['D'])]
は例(サンプル入力、予想される出力、実際の出力) – thefourtheye
を提供してください、この出力が何を表すか説明してください。これはどのように最短経路ですか? –
Hello Sarid!これは重み付けされていないグラフなので、最短パスはルートからノードまでのレベル数です。上の例では、私は親を印刷しているので、混乱しているように見えます。私はしばらくの間、スタックのオーバーフローが発生しましたが、質問を投稿したことはありませんでした(私は今学んでいます)。 –