美文网首页
python使用广度优先搜索寻找最短路径

python使用广度优先搜索寻找最短路径

作者: dwq1666666 | 来源:发表于2019-12-21 11:24 被阅读0次
"""
找最短路径需要使用广度优先搜索
有一个 5 * 4 的二维数组代表地图,如下所示。1代表路障,0代表可以通过,请计算从位置(Xs, Ys)到位置(Xd, Yd)的最短步数。
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
"""
import queue as que


def get_param():

    x = int(input())
    y = int(input())

    x1 = int(input())
    y1 = int(input())

    return {'x': x, 'y': y}, {'x': x1, 'y': y1}, [
            [0, 0, 1, 0],
            [0, 0, 0, 0],
            [0, 0, 1, 0],
            [0, 1, 0, 0],
            [0, 0, 0, 1],
        ]


def main():
    start, end, maze = get_param()
    width = len(maze[0])
    height = len(maze)

    looked = [[-1] * width for i in range(height)]    # 标记节点是否已经走过,和已经走过的步数,-1表示没走过

    moves = [
        {'x': 0, 'y': -1},    # 向上移动一位
        {'x': 1, 'y': 0},     # 向右移动一位
        {'x': 0, 'y': 1},     # 向下移动一位
        {'x': -1, 'y': 0},    # 向左移动一位
    ]

    looked[start['x']][start['y']] = 0  # 开始的节点标记上走过

    q = que.Queue(width * height)
    q.put(start)

    flag = True     # 跳出外层循环的标志
    while q.empty() is False and flag:
        current_node = q.get()  # 取出当前站的节点

        for node in moves:
            # 边不越界
            x = current_node['x'] + node['x']
            y = current_node['y'] + node['y']

            # python 真够人性化的了
            # 先保证不越界,看是否走过,还要看看是否能走

            if (0 <= x < width) \
                    and (0 <= y < height) \
                    and (looked[y][x] == -1) \
                    and (maze[y][x] == 0):
                looked[y][x] = looked[current_node['y']][current_node['x']] + 1   # 标记已经往前面走了一步
                q.put({'x': x, 'y': y})
                # if x == end['x'] and y == end['y']:
                #     flag = False
                #     break

    # for i in range(height):
    #     print(looked[i])
    return looked[end['x']][end['y']]


if __name__ == '__main__':
    print(main())


相关文章

  • 广度优先搜索

    广度优先搜索指出是否有A到B的路径 如果有,广度优先搜索将找出最短的路径面临类似于找最短路径的问题时,可以尝试使用...

  • python使用广度优先搜索寻找最短路径

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 读书打卡 <<算法图解-第六章 广度优先搜索>>

    1.广度优先搜索(BFS)用于解决最短路径问题 2.边(edge)和节点(node)组成图 3.实现广度优先搜索的...

  • 狄克斯特拉算法

    要计算非加权图中的最短路径, 可使用广度优先搜索。 要计算加权图中的最短路径,可使用狄克斯特拉算法。 在无向图中,...

  • 算法图解-广度优先搜索 6/11

    7 狄克斯特拉算法(带权的最短路径,地图路线中的算法)有点没看明白,下期整理。 6 广度优先搜索 广度优先搜索(b...

  • python使用广度优先搜索找最短路径之和

  • 狄克斯特拉算法

    上面图中我们可以使用广度优先搜索查找到从双子峰到金门大桥的最短路径,但这个最短路径只是因为段数最少-只有三段,但不...

  • BFS

    BFS-广度优先搜索-解决最短路径的算法之一。 什么是BFSBFS可以解决什么问题使用BFS模拟最短路线在游戏中使...

  • 广度优先搜索

    广度优先: 在最短的时间查找最优的方法。比如路径,下棋的AI算法。广度优先搜索:样一来,你不仅在朋友中查找,还在朋...

网友评论

      本文标题:python使用广度优先搜索寻找最短路径

      本文链接:https://www.haomeiwen.com/subject/npxgnctx.html