用栈实现迷宫求解Maze

今天我参考严蔚敏的《数据结构》第3章 栈和队列的3.2.4上的问题描述、解决思路和伪代码把迷宫求解的问题自己实现了一遍,感觉超开心的哇~~嘻嘻,贴出来,以供以后翻阅。

解决过程中的几点思考:

1.对于position NextPos(position cur, int dir)函数,它的目的不是提供一个可行的下一个位置,而是提供一个下一个要考虑的位置,至于可不可行,暂时不用考虑,可不可行的判断实际上是由MazePath函数里的if (mazeStatus[curPos.x][curPos.y]==1)完成的。所以NextPos函数不用写成下面这样

position nextPos = cur;

int temp;

if (dir == 1)
{
temp = mazeStatus[cur.x+1][cur.y];
if (temp==0||temp==1)
{
nextPos.x++;
}
else
{
dir = 2;
}
}
if (dir == 2)
{
temp = mazeStatus[cur.x][cur.y+1];
if (temp==0||temp==1)
{
nextPos.y++;
}
else
{
dir = 3;
}
}
if (dir==3)
{
temp = mazeStatus[cur.x-1][cur.y];
if (temp == 0 || temp == 1)
{
nextPos.x--;
}
else
{
dir = 4;
}
}
if (dir==4)
{
nextPos.y--;
}

2.关于

中的while为什么不能改成if,是因为我们在每一次pop完之后都要对这个节点进行判断,判断是否已经对其周边的四个位置已经考虑过了,如果周围四个节点都已经考虑过,则废弃当前位置,即mazeStatus[t.pos.x][t.pos.y]=3;如果在这里我们将while改成if,对最终形成的路线不会有影响,但是可能有个别迷宫的最终位置状态有误(0表示未访问过且“此路不通”;1表示位访问过且“此路通”;2表示访问过,且属于线路;3表示访问过,但是不可行)。

正确的结果图:

如果将上述的while改成if的结果图,红圈的地方表示状态有误:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
求解算法? 可以使用深度优先搜索算法(DFS)来求解迷宫。具体实现方法是使用栈来保存走过的路径,当搜索到终点时,中的路径就是一条正确的路径。以下是 Python 实现迷宫求解的示例代码: ```python # 定义迷宫 maze = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 1, 1, 1, 0], [0, 1, 0, 0, 0, 1, 0, 0], [0, 1, 1, 1, 1, 1, 0, 1], [0, 1, 0, 0, 0, 1, 0, 0], [0, 1, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0]] # 定义节点 class StackNode: def __init__(self, x, y, next=None): self.x = x self.y = y self.next = next # 定义 class Stack: def __init__(self): self.head = None def push(self, x, y): node = StackNode(x, y, self.head) self.head = node def pop(self): if self.head is None: return None node = self.head self.head = node.next return node def is_empty(self): return self.head is None # 定义迷宫求解函数 def solve_maze(maze): start_x, start_y = 1, 1 # 起点 end_x, end_y = 5, 6 # 终点 stack = Stack() stack.push(start_x, start_y) directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 右下左上 while not stack.is_empty(): node = stack.pop() x, y = node.x, node.y for dx, dy in directions: nx, ny = x + dx, y + dy if maze[nx][ny] == 0: # 未走过的路径 stack.push(nx, ny) maze[nx][ny] = maze[x][y] + 1 # 记录步数 if nx == end_x and ny == end_y: # 到达终点 return maze[nx][ny] return None # 没有找到正确路径 # 输出迷宫求解结果 steps = solve_maze(maze) if steps is None: print("没有找到正确路径") else: print(steps) ``` 这段代码中,我们首先定义了一个迷宫,使用 0 表示通路,使用 1 表示墙,然后定义了一个节点和一个数据结构节点保存迷宫中的一个位置,用于保存路径。在迷宫求解函数中,我们首先将起点入,然后使用深度优先搜索算法不断向前寻找可走的路径,直到找到终点或者为空时停止。当搜索到一个节点时,我们将其未走过的路径入,并记录到达该节点时的步数。如果最终能够到达终点,则返回到达终点的步数。如果没有找到正确的路径,则返回 None。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值