列表查找路徑我有如下形式的元組的列表:從元組在Python
data = [('Abe', 'Bob', '3'),
('Abe', 'Frank', '5'),
('Abe', 'George', '4'),
('Carl', 'Bob', '1'),
('Dan', 'Carl', '2')]
此數據模擬了一個無向圖,其中有來自「安倍晉三」到「鮑勃」的連接大小3.因爲圖是無向的,所以也意味着從「Bob」到大小爲3的「Abe」也有連接。
我需要顯示兩個輸入之間是否存在連接以及它的重量是多少。例如,如果輸入是'Abe','Dan',結果將返回從'Abe'到'Dan'的最短(最小節點跳數,不是最小重量)路徑,這將是Abe,Bob,Carl,Dan和重量,3 + 1 + 2 = 6.
我有這個代碼顯示'Abe'是否會達到'丹',但我不知道如何返回路徑。
def get_path_and_weight(data, start, end):
reachable = [start]
added = -1
while added != 0:
added = 0
for first, second, weight in data:
if(first in reachable) and (second not in reachable):
reachable.append(second)
added += 1
if(first not in reachable) and (second in reachable):
reachable.append(first)
added += 1
if (end in reachable):
print("YES")
#return path
else:
print("NO")
確定算法本身是正確的幾個包?也許你找不到路徑的原因是你沒有真正檢查它。檢查它是否已斷開連接。一眼就可以回答一個頂點是否在圖中。你想要做的是廣度優先搜索或深度優先搜索。 – luk32
我還沒有喝過咖啡,但我的第一個想法是隻做Dijkstra,其僞邊權重爲1,這將爲您提供從一個節點到另一個節點的跳數最少的路徑。然後添加稍後使用的邊的實際權重。 – timgeb