利用栈求一条迷宫路径(不一定是最优路径)

#include<stdio.h>
#include<malloc.h>
#define MazeRow 10//迷宫的行数
#define MazeCol 10//迷宫的列数

static char Maze[MazeRow][MazeCol] = {  
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},  
    {'#', ' ', ' ', '#', ' ', ' ', ' ', '#', ' ', '#'},  
    {'#', ' ', ' ', '#', ' ', ' ', ' ', '#', ' ', '#'},  
    {'#', ' ', ' ', ' ', ' ', '#', '#', ' ', ' ', '#'},  
    {'#', ' ', '#', '#', '#', ' ', ' ', ' ', ' ', '#'},
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 利用实现迷宫路径求解: 算法步骤: 1. 将起点压入中,并将起点设置为已访问。 2. 对于顶元素,依次遍历其四个方向的相邻点,如果该点未访问且可以通过,则将该点压入中,并将其设置为已访问。 3. 如果顶元素为终点,则返回路径。 4. 如果顶元素无法继续移动,则弹出顶元素。 代码实现: ```python def maze_path(maze, start, end): stack = [start] visited = set() while stack: curr = stack[-1] if curr == end: return stack found = False for next in [(curr[0]-1, curr[1]), (curr[0]+1, curr[1]), (curr[0], curr[1]-1), (curr[0], curr[1]+1)]: if next not in visited and maze[next[0]][next[1]] == 0: stack.append(next) visited.add(next) found = True break if not found: stack.pop() return None ``` 2. 利用队列实现迷宫最短路径求解: 算法步骤: 1. 将起点加入队列,并将其设置为已访问。 2. 当队列不为空时,取出队首元素,遍历其四个方向的相邻点,如果该点未访问且可以通过,则将该点加入队列,并将其设置为已访问。 3. 如果该点为终点,则返回路径长度。 4. 如果队列为空,则表示无法到达终点。 代码实现: ```python def maze_shortest_path(maze, start, end): queue = [(start, 1)] visited = set() visited.add(start) while queue: curr, step = queue.pop(0) if curr == end: return step for next in [(curr[0]-1, curr[1]), (curr[0]+1, curr[1]), (curr[0], curr[1]-1), (curr[0], curr[1]+1)]: if next not in visited and maze[next[0]][next[1]] == 0: queue.append((next, step+1)) visited.add(next) return -1 ``` 3. 利用递归实现迷宫所有路径求解: 算法步骤: 1. 从起点开始,依次遍历其四个方向的相邻点,如果该点未访问且可以通过,则将其加入路径中,并将其设置为已访问。 2. 如果该点为终点,则将当前路径加入结果集中。 3. 如果该点无法继续移动,则将其从路径中删除。 4. 对于路径中的每一个点,重复步骤1-3。 代码实现: ```python def maze_all_paths(maze, start, end, path, paths): path.append(start) if start == end: paths.append(path[:]) else: for next in [(start[0]-1, start[1]), (start[0]+1, start[1]), (start[0], start[1]-1), (start[0], start[1]+1)]: if next not in path and maze[next[0]][next[1]] == 0: maze_all_paths(maze, next, end, path, paths) path.pop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值