如下图所以,#字型方格中填充有数字1,2,3。每种数字的个数为8,每行每列都可以“滚动”,实际上是指每行每列的数组可以左右移位。求使得中间8个小格子变为同一种数字的“滚动”方式,要求步数最少,步数相同的情况下滚动序列的字典序最小。
我发现IDA*好像因为深度限制以及估价函数的存在而不需要进行判重。
链接
题目链接:Uva1343-The Rotation Game
参考链接:Rujia Liu’s repository
题解
一开始想用BFS进行状态空间搜索,但是状态数总共有24!/(8!*8!*8!) = 9465511770
种情况,而且我也不知道怎样构造哈希比较合适= =。刘汝佳老师的IDA*实现方法代码简单清晰,而且很自然的满足了题目中的步数最少,字典序最小的要求。而且我发现IDA*好像因为深度的限制和估价函数的存在而不需要考虑判重的问题。
代码
1 | /* |