列表查找路径我有如下形式的元组的列表:从元组在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