python廣度優先搜尋 並列印路徑

2021-09-26 09:27:21 字數 1771 閱讀 3806

from collections import deque 

graph =

graph[

"you"]=

["alice"

,"bob"

,"claire"

]graph[

"bob"]=

["anuj"

,"peggy"

]graph[

"alice"]=

["peggy"

]graph[

"claire"]=

["thom"

,"jonny"

]graph[

"anuj"]=

graph[

"peggy"]=

graph[

"thom"]=

graph[

"jonny"]=

#起始頂點和結束頂點

start=

'you'

end=

'thom'

distance=

0#建立佇列

search_queue = deque(

)#往佇列中加入起始頂點關聯的下一批

search_queue+=graph[start]

#print search_queue

#標記已經遍歷過的頂點

searched=

[start]

#當佇列不為空時

while search_queue:

#將佇列第一位取出

person = search_queue.popleft(

)#print person

#如果該頂點還沒有被遍歷

if person not

in searched:

#且該頂點已經到達目的

if person == end:

print searched

#該頂點已經被遍歷

else

:# 將此人關聯的其他人加入佇列

search_queue += graph[person]

#print search_queue

輸出

['you', 'alice', 'bob', 'claire', 'peggy', 'anuj', 'thom']
但是這個只能得到頂點的遍歷順序(輸出searched陣列即可)。如果我們想將start=『you』,

end='thom』這兩個頂點間的路徑和路徑長度求出來,單單上面的**是不夠的。

#列印最短路徑l=[

]endd=

'thom'

l=[endd]

#沒有找到其實頂點you

while endd !=

'you'

:#遍歷searched的頂點

for i in searched:

#如果找到endd的父親

if endd in graph[i]

:#將父親加入到陣列

#令endd=父親頂點(繼續找父親的父親,直到找到起始頂點)

endd=i

break

print l

print l[::

-1]

輸出

[

'thom'

,'claire'

,'you'][

'you'

,'claire'

,'thom'

]

python深度優先搜尋和廣度優先搜尋

圖的深度優先搜尋 depth first search 和樹的先序遍歷比較類似。它的思想 假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。若此時尚有其他頂點未被訪問到,則另...

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...

廣度優先搜尋

include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...