python寻找地图上最短路线_python中Dijkstra算法在实地图上的最短路径

我试图用Dijkstra算法在真实地图上找到两个点之间的最短路径,但是在有限的时间内(120秒)我无法得到结果。如何优化我的代码?我只允许用“枕头”作为外包装。在

在map上有两个红点(33193)(749457),我想画出它们中最短的路径。但即使花费很长时间也不能得出结果。我很好地测试了Dijkstra的算法,不知道它是否还有很多缺陷。Dijkstra的算法是用同样的距离创建的——1。在

Here是完整的代码。在def walkback(P, x, y):

L = [y]

while x != y:

y = P[y]

L = [y] + L

return L

def path(A, x, y):

M = []

W = [x]

P = {}

while W != []:

u = W.pop()

if u == y:

return walkback(P, x, y)

M.append(u)

for v in A[u]:

if not v in M:

P[v] = u

W.append(v)

return None

这是Dijkstra算法。

我为此做了测试。在

^{pr2}$

对于任何像素,白色和红色(开始、结束)都是可移动的点,并设置为0。其他颜色设置为1。在for x in range(0, w):

for y in range(0, h):

(r, g, b, a) = im.getpixel((x, y))

if (r, g, b) == (255, 0, 0):

Red.append((x, y))

arr[y][x] = 0

elif (r, g, b) == (255, 255, 255):

arr[y][x] = 0

else:

arr[y][x] = 1

这就为任何可移动的点创建了一个图形。对于['0.1':['0.2','0.3']],这意味着您可以从(0,1)移动到(0,2)和(0,3)。在def coord2num(x, y):

z = str(x) + "." + str(y)

return z

B = {}

for x in range(0, h):

for y in range(0, w):

if arr[x][y] != 0:

continue

key = coord2num(x, y)

B[key] = []

if x - 1 >= 0 and arr[x - 1][y] == 0:

value = coord2num(x - 1, y)

B[key].append(value)

if x + 1 < h and arr[x + 1][y] == 0:

value = coord2num(x + 1, y)

B[key].append(value)

if y + 1 < w and arr[x][y + 1] == 0:

value = coord2num(x, y + 1)

B[key].append(value)

if y - 1 >= 0 and arr[x][y - 1] == 0:

value = coord2num(x, y - 1)

B[key].append(value)

我期望输出最短的路径,但它仍然没有时间。在


版权声明:本文为weixin_39777163原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。