私はこのグラフを持っており、幅優先探索アルゴリズムを使って頂点から別の頂点までのパスがあるかどうかを調べたいと思います。これは幅優先探索アルゴリズムですか?
だから、私はパスの有無に応じて、trueまたはfalseを返すのpythonで関数を実装し、それが動作します。さて、それは私が作ったテストのために働いた。私が知りたいのは、これが実際に呼吸優先検索アルゴリズムである場合です。以前はBFSのアルゴリズムは見ていませんでした。ここで、私は繰り返し、それを実装してもBFSは、再帰的に実装されていることを聞いて、私はit.Soに疑問を持っている理由です機能と私のグラフの表現の両方です:
outb = {1: [2, 3],
2: [4, 5],
3: [5, 11, 12],
4: [6, 7],
5: [7],
6: [9, 10],
7: [8],
11: [3],
12: [15, 14, 13],
13: [17],
14: [17],
15: [12, 5, 8, 16],
17: [18]}
def BFS(v1, v2):
parsed = []
toParse = [v1]
current = v1
while len(toParse) > 0:
while current in parsed:
current = toParse.pop(0)
if current not in outb:
return False
if v2 in outb[current]:
return True
toParse += outb[current]
parsed.append(current)
return False
そして、私が持っている最後の質問です:BFSはその性質上、頂点から頂点までの最短経路を見つけるか?私はインターネット上でこのことを読んで、私は確信したい。
[wikipediaのページ](https://en.wikipedia.org/wiki/Breadth-first_search)を読んでください。あなたのコードがそこにアルゴリズムを実装しているように見え、BFSが最短経路を見つけたことを示しています。 – Barmar
あなたのコードをウィキペディアの擬似コードと比較すると、 'S == parsed'、' Q == toParse'、 'current == current'です。 – Barmar
あなたのコードはBFSですが、 'current not in outb'はパスがないことを意味するわけではなく、' toParse'が実際に何かを持っているかどうか考慮せずに 'toParse.pop(0)'をしようとします。要素。また、リストは、使用されるほとんどのデータ構造にとって効率的な選択ではありません。 – user2357112