我想写一条代码,找到起点和终点之间的最短路径。我写了一个代码,它没有错误,但是并不能满足我的要求。
它显示“运动”,但没有在终点处结束。
如何解决该问题,如何包含“路径”需要从头到尾的条件?
您在下面有“地图”的示例和代码。
非常感谢。
代码:
import random
def shortestWay(n):
minx = 1
miny = 1
maxx = 5
maxy = 5
x_start = 1
y_start = 1
X_end = 3
Y_end = 5
for i in range (n):
way = random.choice(["up", "down", "left", "right"])
if way == "up" and y_start<maxy:
y_start +=1
elif way == "down" and y_start>miny:
y_start -=1
elif way == "left" and x_start>minx:
x_start -=1
elif way == "right" and x_start<maxx:
x_start += 1
if x_start == X_end and y_start == Y_end:
return(x_start,y_start)
x1 = x_start
y1 = y_start
return (x1, y1)
list1 = []
for i in range(25):
way = shortestWay(10)
theShortestWay = abs(way[0]) + abs(way[1])
list1.append(theShortestWay)
x = min (list1)
print(way, "distance from start: ", theShortestWay, "cells")
print ("Minimal distance: ", x)
答案 0 :(得分:0)
从源点开始,“向”目标点移动,但不要在目标点“之上”移动。根据起点和终点来定义“向”和“超越”。
答案 1 :(得分:0)
第一个函数“ shortestWay(n)”在随机方向上执行n次迭代,很显然,它可以降落到目标X,Y之外的其他地方,这是正常的。 例如,您应该根据当前距目标X,Y的距离来制定算法。在每个步骤中,都尝试使abs(X_start-X_end)和abs(Y_start-Y_end)尽可能小。