八数码问题
八数码题目地址:
Acwing
HDU
在一个 3×3 的网格中,1∼8 这 8 个数字和一个 X 恰好不重不漏地分布在这 3×3 的网格中在游戏过程中,可以把 X 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为正确排列
把 X 与上下左右方向数字交换的行动记录为 u、d、l、r。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列
我花了好几个晚上才完整的写了出来,毕竟还是新手,但独立写出来之后还有一点成就感(当然有参考)。下面就来小小提提我的思路吧。
bfs不仅可以搜索路径,还可以搜索状态。
这是我从黑书上看到的一句话,从后几个晚上便开始了我的不归路。
所以我也用黑书上的思路,bfs+cantor解决这道题
这题要寻找最短路径,所以bfs更适合
1. 广度优先搜索 (BFS)这个思路很好理解
1234567初始状态入队 while(队列不为空) 取出队首 if(找到目标) 返回答案 else 相邻状态入队
伪代码非常清晰,现在我们把文字展开成代码实现得到。
首先我们联系一下问题
输入占一行,将 3×3 的初始 ...