确定字典中从x键到y键的最快路径?

时间:2017-12-27 11:22:28

标签: python dictionary shortest-path

如果所有这些都通过数组值连接,那么如何以最快的方式从字典中的键x到键y获取。

network={
 1: [3],
 2: [4],
 3: [1, 8, 7, 6, 4],
 4: [2, 3, 6, 5],
 5: [4, 11, 10],
 6: [3, 11, 4],
 7: [3, 8, 11],
 8: [3, 16, 9, 7],
 9: [8, 16, 14, 11],
 10: [5, 11, 13],
 11: [5, 6, 7, 9, 14, 10],
 12: [13],
 13: [10, 14, 12],
 14: [9, 16, 13, 11],
 15: [16],
 16: [8, 15, 14, 9]}

键表示值x或y。它们的阵列就像它们彼此连接一样。示例:1已连接到33已连接到1, 8, 7, 6, 4 esc。

我已经创建了一个函数,可以为您提供从x到y的跳转次数。

def jumps(x, y, network):
x={x}
for i in range(1, len(network)):
    x=neighbors(x, network)
    if(y in x):
        return i

def neighbors(x, network):
seen=[]
for krizisce in x:
    for izvoz in network[krizisce]:
        if izvoz not in doslej and izvoz not in seen:
            seen.append(izvoz)
return {x for x in seen}

但是我想从x到y获得最短的键数组。

例如,如果我选择两个彼此相距很远的值,例如:115 我想从1 -> 15获得最短的路径。那将是[1, 3, 8, 16, 15]

1 个答案:

答案 0 :(得分:2)

这是寻找最短路径的标准案例,并且已在互联网上实施。

如果您想了解,请查看此处:https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

如果您需要快速实施,这似乎与您的实施很相似:https://gist.github.com/econchick/4666413