所以,我有這張圖,我想使用廣度優先搜索算法來查看是否存在從頂點到另一個頂點的路徑。這是一個廣度優先的搜索算法嗎?
所以,我實現了Python中的功能取決於通路的存在,它返回true或false,和它的作品。那麼,它爲我做的測試工作。我想知道的是,如果這確實是一個呼吸優先的搜索算法。我以前沒有見過任何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 page](https://en.wikipedia.org/wiki/Breadth-first_search)。它看起來像你的代碼在那裏執行算法,它表明BFS找到最短路徑。 – Barmar
比較你的代碼和維基百科中的僞代碼,S == parsed,Q == toParse,current == current。 – Barmar
你的代碼是一個BFS,但它也是錯誤的,因爲'current not in outb'並不意味着沒有路徑,並且你試圖做'toParse.pop(0)'而不考慮'toParse'是否真的有元素。而且,對於大多數使用的數據結構,列表並不是一個有效的選擇。 – user2357112