找到两点之间的最短路径

时间:2018-11-07 00:14:07

标签: python

我想写一条代码,找到起点和终点之间的最短路径。我写了一个代码,它没有错误,但是并不能满足我的要求。

它显示“运动”,但没有在终点处结束。

如何解决该问题,如何包含“路径”需要从头到尾的条件?

您在下面有“地图”的示例和代码。

非常感谢。

地图: enter image description here

代码:

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)

2 个答案:

答案 0 :(得分:0)

从源点开始,“向”目标点移动,但不要在目标点“之上”移动。根据起点和终点来定义“向”和“超越”。

答案 1 :(得分:0)

第一个函数“ shortestWay(n)”在随机方向上执行n次迭代,很显然,它可以降落到目标X,Y之外的其他地方,这是正常的。 例如,您应该根据当前距目标X,Y的距离来制定算法。在每个步骤中,都尝试使abs(X_start-X_end)和abs(Y_start-Y_end)尽可能小。