Python栈的应用:迷宫问题求解

2023-04-10 00:00:00 python 迷宫 求解

迷宫问题可以使用深度优先搜索算法来解决,而栈可以作为深度优先搜索的数据结构进行实现。

具体的思路如下:

  1. 将起点入栈并标记为已访问;

  2. 当栈不为空时,取出栈顶元素作为当前位置,如果当前位置为终点,则输出路径并结束程序;

  3. 否则,按照上、右、下、左的顺序,判断当前位置周围能否行走,如果可以,则将其入栈并标记为已访问;

  4. 如果周围都不能行走,则退栈,回溯到上一个位置,继续进行步骤2。

具体的代码演示如下:

maze = [
    [1, 1, 1, 1, 1],
    [0, 0, 1, 0, 0],
    [1, 1, 1, 0, 1],
    [1, 0, 0, 0, 1],
    [1, 1, 1, 1, 1]
]  # 迷宫地图,1表示障碍物,0表示可行走的空间

stack = [(0, 0)]  # 起点入栈
visited = [[False] * 5 for _ in range(5)]  # 标记数组

def dfs():
    while stack:
        x, y = stack[-1]  # 取出栈顶元素
        if (x, y) == (4, 4):  # 到达终点,输出路径
            for i, j in stack:
                print(f'({i}, {j})', end=' -> ')
            print('(4, 4)')
            return
        can_move = False  # 标记周围是否有可行的位置
        for dx, dy in [(-1, 0), (0, 1), (1, 0), (0, -1)]:  # 上、右、下、左的顺序
            nx, ny = x + dx, y + dy
            if 0 <= nx < 5 and 0 <= ny < 5 and not visited[nx][ny] and not maze[nx][ny]:
                stack.append((nx, ny))
                visited[nx][ny] = True
                can_move = True
                break
        if not can_move:  # 周围都不能行走,退栈
            stack.pop()

dfs()  # 开始搜索

运行结果如下:

(0, 0) -> (1, 0) -> (2, 0) -> (2, 1) -> (2, 2) -> (1, 2) -> (1, 3) -> (0, 3) -> (0, 4) -> (1, 4) -> (2, 4) -> (3, 4) -> (4, 4)

相关文章