八数码问题思路
前言:备战蓝桥杯遇到一个八数码问题,整理一下思路。第一次写,不太好,见谅。
BFS是由近到远的扩散过程,解决最短距离问题。搜索的可以是数,也可以是状态,八数码就是状态。从初始状态出发,每次转移都逐步逼近最终状态,每转移一次步数加一,达到目标时,经过的步数就是最短路径。
举个例子:
初始状态
| 1 | 2 | 3 |
| 8 | 4 | |
| 7 | 6 | 5 |
最终状态
| 1 | 3 | |
| 8 | 2 | 4 |
| 7 | 6 | 5 |
把空格看成0,计算最少的移动步数。
共9!种状态。用队列描述BFS,画图模拟一下,这个很简单就不多写了。会发现有重复的情况,那么我们需要判断重复。
八数码问题最重要的就是判断重复。可以用康托展开Cantor()
康托展开是干什么的?

本文介绍了备战蓝桥杯时遇到的八数码问题及其解决思路。使用广度优先搜索(BFS)配合队列进行状态搜索,并通过康托展开来判断状态的重复,避免无效路径。康托展开用于计算排列位置,辅助实现最短步数的查找。文中还解释了康托展开的原理,并给出了问题的解决方案概述。
最低0.47元/天 解锁文章
1330

被折叠的 条评论
为什么被折叠?



