广搜

您所在的位置:网站首页 拼图游戏破解 广搜

广搜

2024-07-14 12:45| 来源: 网络整理| 查看: 265

先看题:

小 C 做了一个拼图游戏,大家来破解它吧。

游戏规则:每次可以移动相邻的两张图片,所有图片都在指定的位置上,游戏完成。

简化问题,每次输入一个 3 × 3 3\times 3 3×3 的矩阵,表示要拼的图。

分析

可以发现此题搜索树特别庞大,所以不进行状态判重是不行的。

所以我们可以开一个 9 9 9 维的 bool 数组来进行判重,但这样子空间复杂度约为 1GB,如果你家电脑能开的下也行。

很明显如果只对一个状态判重,那多开的其他空间就是浪费,所以考虑将一个 3 × 3 3\times 3 3×3 的矩阵压成一个 9 9 9 位十进制整数,如将矩阵:

123 456 789

压成 123456789 123456789 123456789,但是普通的数组开不到 1 0 9 10^9 109 的所以可以用 map 或哈希实现。

而广搜时只需将整数化为矩阵进行操作,再将矩阵压成整数放入队列。

代码

实现时有些技巧,具体看代码。

#include #define int long long using namespace std; const int N = 15, mod = 1000003;//哈希模数设为质数效率会高些 int dx[] = {0, 1, 0}, dy[] = {0, 0, 1}; vector nbr[mod + 5];//哈希数组 bool find(int x){//查找有没有出现过 int P = x % mod; for(int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3