当前位置: 首页 > article >正文

迷宫求解:探索最优路径的算法与应用

迷宫求解问题通常可以通过图搜索算法来解决,常用的方法包括广度优先搜索(BFS)、深度优先搜索(DFS)和A*算法。以下是一个使用BFS解决迷宫问题的Python示例:

Python 迷宫求解代码示例

from collections import deque

def is_valid_move(maze, visited, position):
    x, y = position
    return (0 <= x < len(maze)) and (0 <= y < len(maze[0])) and (maze[x][y] == 0 and not visited[x][y])

def bfs(maze, start, end):
    queue = deque([start])
    visited = [[False] * len(maze[0]) for _ in range(len(maze))]
    visited[start[0]][start[1]] = True
    parent = {start: None}

    while queue:
        current = queue.popleft()
        if current == end:
            break

        x, y = current
        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:  # 上、下、左、右
            neighbor = (x + dx, y + dy)
            if is_valid_move(maze, visited, neighbor):
                visited[neighbor[0]][neighbor[1]] = True
                queue.append(neighbor)
                parent[neighbor] = current

    # 追溯路径
    path = []
    while current is not None:
        path.append(current)
        current = parent[current]
    path.reverse()  # 反转路径

    return path if path[0] == start else []

# 示例迷宫,0表示通路,1表示墙
maze = [
    [0, 1, 0, 0, 0],
    [0, 1, 0, 1, 0],
    [0, 0, 0, 1, 0],
    [0, 1, 0, 0, 0],
    [0, 0, 1, 1, 0]
]

start = (0, 0)  # 起点
end = (4, 4)    # 终点

path = bfs(maze, start, end)

if path:
    print("找到路径:", path)
else:
    print("无路径可达")

代码说明

  1. 迷宫表示:使用二维数组,0表示通路,1表示墙。
  2. is_valid_move:检查是否可以移动到指定位置。
  3. bfs:使用BFS算法从起点搜索到终点,维护一个队列和已访问的状态。
  4. 路径追溯:通过parent字典追溯找到的路径。

你可以根据自己的需要修改迷宫的布局和起点、终点的位置。


http://www.kler.cn/a/377895.html

相关文章:

  • 高级的SQL查询技巧有哪些?
  • 模型 课题分离
  • IntelliJ IDEA 快捷键大全:提升开发效率的利器
  • 使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
  • 图片懒加载
  • C++算法第十二天
  • Java接入Hive
  • IMX6ULL裸机-汇编_反汇编_机器码
  • win10 更新npm 和 node
  • Redis系列---常见问题
  • Hadoop生态圈框架部署(一)- Linux操作系统安装及配置
  • [CARLA系列--01]CARLA 0.9.15 在Windows下的安装教程(一)
  • 系统架构师如何备考-超有用的备考经验(送博主用到的资料)
  • RHCE——DNS域名解析服务器、selinux、防火墙
  • 字符串-05-字符串合并处理
  • 抗疫物资智能管理:SpringBoot技术探索
  • 两数之和笔记
  • redis v6.0.16 安装 基于Ubuntu 22.04
  • (蓝桥杯C/C++)——STL(上)
  • 使用代理和不使用代理request获取host、scheme、url、ip区别
  • FOYA传媒科技招聘
  • 第五项修炼—系统思考
  • 二分查找算法—C++
  • 【机器学习】18. 反向传播 Backpropagation algorithm, 学习率,动量Momenetum, Xavier,梯度消失
  • 实用篇:Postman历史版本下载
  • UI设计公司—兰亭妙微—提供轨道交通行业UI设计