路径寻找问题(八数码问题)

原创、转载请注明出处

之前的图都是显式的,路径寻找还可以用于隐式图。

隐式图的一个结点往往表现为一个状态,路径寻找就是寻找从一个状态走到另一个状态的路径。

八数码问题

3*3的矩阵中,8个格子中有数字,1个格子是空的,只允许空格子的相邻格子中的数字移动到空格子中这一种行为,给定初始状态和最终状态,求最小移动次数。

问题分析:

数字在格子中的一种摆法是一个状态,所有的状态组成一个状态空间,初始状态是起点,最终状态是终点,问题就转换成了 找从起点到终点的最短路问题。

最短路用bfs。(边界是找到最终状态,分支是当前状态能够转换成的状态,查重是记录搜索过得状态不再搜索,利用状态压缩使得状态容易表示)

搜索过得结点不用再搜索了,所以,每次枚举一个状态,都要检查是否重复了,这就要把“走过的结点”存储起来,然后查重。如何查重呢,每次都找一遍,遍历所有状态,比较9个数的顺序是否一样?太低效,要搜索的状态一共有9!=362879个,可以把012345678~876543210映射成0~362879,一一对应。

 

转载于:https://www.cnblogs.com/mu-ye/p/7710114.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A*算法(A* Search Algorithm)是一种启发式搜索算法,常用于求路径finding和游戏AI中的最优问题,包括经典的八数码游戏(也称作15 puzzle)。在八数码游戏中,A*算法能有效地找到从初始状态到目标状态的最短路径。 关于A*算法在八数码问题上的应用,有很多研究论文和开源代码库可供参考。以下是一些经典的参考文献: 1. "A* Search" by Hart, Nilsson, and Raphael: 这篇1968年的论文是A*算法的原始发表,虽然是针对一般路径寻找问题,但概念适用于八数码游戏的求。 2. "Efficient solution of the 15-puzzle using A*" by J. H. van den Heuvel: 这篇论文专门探讨了如何利用A*算法优化八数码游戏的求策略。 3. "A* search with domain-specific heuristics for solving the 15-puzzle" by R. E. Korf: Korf在论文中讨论了针对八数码游戏设计特定启发函数的重要性。 4. "Path Finding in the 15 Puzzle Using A*" by M. P. de Freitas, T. F. Gomes, and A. C. Costa: 这篇文章深入分析了A*在决复杂状态空间下的表现。 5. "An Improved A* Algorithm for Solving the 15 Puzzle" by B. S. Chakraborty and S. N. Chakraborty: 提出了一些改进A*算法的具体技巧,以提升八数码游戏的求效率。 相关问题: 1. A*算法的关键组成部分是什么? 2. 八数码游戏中如何定义启发式函数来评估节点的优先级? 3. 除了经典A*,还有哪些优化方法可以用于加速八数码游戏的求

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值