这是一个使用A* search算法解迷宫的问题,细节请看:http://www.laurentluce.com/posts/solving-mazes-using-python-simple-recursivity-and-a-search/

Laurent Luce的A* search算法有点问题,我这边运行是死循环,稍微修改了一下。

import heapqclass Cell(object):def __init__(self, x, y, reachable):self.reachable = reachableself.x = xself.y = yself.parent = Noneself.g = 0self.h = 0self.f = 0class AStar(object):def __init__(self):self.op = []heapq.heapify(self.op)self.cl = set()self.cells = []self.gridHeight = 6self.gridWidth = 6def init_grid(self):walls = ((0, 5), (1, 0), (1, 1), (1, 5), (2, 3),(3, 1), (3, 2), (3, 5), (4, 1), (4, 4), (5, 1))for x in range(self.gridWidth):for y in range(self.gridHeight):if (x, y) in walls:reachable = Falseelse:reachable = Trueself.cells.append(Cell(x, y, reachable))self.start = self.get_cell(0, 0)self.end = self.get_cell(5, 5)def get_heuristic(self, cell):return 10 * (abs(cell.x - self.end.x) + abs(cell.y - self.end.y))def get_cell(self, x, y):return self.cells[x * self.gridHeight + y]def get_adjacent_cells(self, cell):cells = []if cell.x < self.gridWidth-1:cells.append(self.get_cell(cell.x+1, cell.y))if cell.y > 0:cells.append(self.get_cell(cell.x, cell.y-1))if cell.x > 0:cells.append(self.get_cell(cell.x-1, cell.y))if cell.y < self.gridHeight-1:cells.append(self.get_cell(cell.x, cell.y+1))return cellsdef display_path(self):cell = self.endwhile cell.parent is not self.start:cell = cell.parentprint 'path: cell: %d,%d' % (cell.x, cell.y)def update_cell(self, adj, cell):adj.g = cell.g + 10adj.h = self.get_heuristic(adj)adj.parent = celladj.f = adj.h + adj.gdef process(self):heapq.heappush(self.op, (self.start.f, self.start))while len(self.op):f, cell = heapq.heappop(self.op)self.cl.add(cell)if cell is self.end:self.display_path()breakadj_cells = self.get_adjacent_cells(cell)for c in adj_cells:if c.reachable:if c in self.cl:if (c.f, c) in self.op:if c.g > cell.g + 10:self.update_cell(c, cell)else:self.update_cell(c, cell)heapq.heappush(self.op, (c.f, c))if __name__ == "__main__":a = AStar()a.init_grid()a.process()

A* search算法解迷宫相关推荐

  1. 使用A*算法解迷宫最短路径问题

    原创文章,转载请联系作者 时光只解催人老,不信多情,长恨离亭,泪滴春衫酒易醒. 前言 最近接触了一个挺有意思的小课题,跟大家分享一下.就是利用A*算法,来计算迷宫可行路径.有关这个算法的知识,大家可以 ...

  2. 实验三、prim算法生成迷宫,A*算法解迷宫(实验准备)

    目录 实验要求: 算法简介: prim算法: A*算法: 实验要求: 该项目的主要要求是:首先生成一个迷宫,要求随机生成.而生成迷宫有深度优先算法.prim算法.递归分割算法等.老师说建议使用prim ...

  3. 新颖性搜索(Novelty Search,NS)算法实践——利用NS算法解决迷宫导航问题

    新颖性搜索(Novelty Search,NS)算法实践--利用NS算法解决迷宫导航问题 新颖性搜索(Novelty Search,NS)算法介绍 NS实现基础 NovItem NoveltyArch ...

  4. 利用广度优先和深度优先算法解决迷宫问题【算法设计与分析】<图搜索问题>

    实验问题: 给定一个n*n的迷宫,要求利用广度优先和深度优先算法解决迷宫问题 问题分析: 对于此问题首先要明确搜索顺序 可以分为两种方法求解问题:1.广度优先算法2.深度优先算法 (1)对于深度优先算 ...

  5. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  6. 回溯算法解决迷宫问题

    文章目录 前言 一.回溯法 二.算法应用--迷宫问题 1.问题描述 2.解题思路 三.Java代码实现 前言 本文介绍一种经典算法--回溯法,可作为迷宫问题的一种解法. 一.回溯法 回溯是一种算法思想 ...

  7. beam search算法

    转载 https://blog.csdn.net/xyz1584172808/article/details/89220906 https://blog.csdn.net/batuwuhanpei/a ...

  8. 神经进化算法——利用NEAT算法解决迷宫导航问题(基于NEAT-Python)

    神经进化算法--利用NEAT算法解决迷宫导航问题(基于NEAT-Python) 迷宫导航问题 迷宫环境模拟 迷宫导航智能体 迷宫环境实现 传感器数据生成 导航智能体 智能体位置更新 智能体记录存储 智 ...

  9. 基于A*搜索和深度优先搜索解迷宫问题

    摘 要 迷宫问题是指能够从起始点寻找一条通往目标点的路径,迷宫的传统搜索是采用深度优先和宽度优先搜索,虽然也能够解决迷宫的求解问题,但是这些方法效率比较低.我们已经知道深度优先和广度优先搜索归于为盲目 ...

  10. 禁忌搜索(Tabu Search)算法及python实现

    禁忌搜索(Tabu Search)算法及python实现 版权声明:本文为博主原创文章,博客地址:https://blog.csdn.net/adkjb,未经博主允许不得转载. 禁忌搜索(Tabu S ...

最新文章

  1. 【全网之最】全网最简洁判断JavaScript中字符串是否以某一个特定字符串结尾的方法,多用于判断文件名的后缀(格式)
  2. AIX系统管理--关于unsuccessful login attempts和account_locked
  3. windows下Python到linux运行遇到的字符编码问题
  4. 阿里巴巴的云原生与开发者
  5. php解析乱码字符串,PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
  6. SpringBoot Quartz 定时任务详解
  7. 《机器学习实战》第十章错误总结
  8. Socket accept failed
  9. Silverlight专题(10)- WatermarkedTextBox使用
  10. 消息队列mysql redis那个好_Redis与RabbitMQ作为消息队列的比较
  11. 软件项目周报_有关细节、效率、周报和扯淡
  12. ajax与java交互实例,1、Ajax与Java通过GET方式交互
  13. 每日算法系列【LeetCode 470】用 Rand7() 实现 Rand10()
  14. 如何释放你的MacBook磁盘空间
  15. 拒绝LOW ---青鸟影院购票系统
  16. 计算机端口连接失败,电脑telnet端口(23端口)提示连接失败怎么办?
  17. iOS提高开发效率的方法和工具
  18. python绘制线段_使用matplotlib绘制线段线
  19. cad黑色背景变成白色_盘点CAD中你可能不知道的实用小技巧
  20. Matlab代码运行基础文章讲解

热门文章

  1. 【转贴】二节棍精典棍花动作详解
  2. 成员方法的使用及其调用
  3. 获取页面iframe里的元素
  4. 201521123054 《Java程序设计》 第2周学习总结
  5. Android-界面-布局
  6. 常见input输入框 点击 发光白色外阴影 focus
  7. VMware 11 安装 OS X 10.10 虚拟机
  8. Javascript:拦截所有AJAX调用,重点处理服务器异常
  9. Python + Selenium 自动发布文章(一):开源中国
  10. Luogu P2068 统计和