U596513 数字华容道(基础版)
题目背景
[提升版](https://www.luogu.com.cn/problem/U599041)
小e发现了一个有趣的游戏:数字华容道!
(我总算会写 $Special\ Judge$ 了!!!!!)
题目描述
规则是这样的:在 $3\times3$ 的棋盘上,有 $8$ 个标有数字 $1-8$ 的滑块和一个空格(表示为 $0$)。每次操作可以将一个滑块移动到相邻的空格中。最终需要复原成如下图的样子:\
\
小e玩的时候,一直在思考一个问题:对于每个打乱状态的盘面,最少需要移动几步才能复原呢?他实在想不过来,就想请你来帮忙。\
现在,小e给了你一个初始状态,让你求出恢复目标状态的最少移动步数。并且,小e还想让你输出移动滑块的序列。请你来帮帮他吧!
(全部状态 $=9!=362880$)
:::info[本题SPJ]
```cpp
#include "testlib.h"
struct Move
{
int fx, fy, tx, ty;
}mo[1000005];
int len=0;
bool cc(int x, int y)
{
return (x3 || y3);
}
int StoI(std::string s)
{
std::stringstream ss;
sst;
return t;
}
int main(int argc, char* argv[]) {
registerTestlibCmd(argc, argv);
int pm[10][10];
for(int i=1;i1000000)
{
quitf(_wa,"The answer is too long");
}
}
for(int i=1;i
输入格式
输入一个 $3\times3$ 的方阵,表示初始的盘面,空格表示为 $0$。
输出格式
如果有解,输出:
>第一行,输出一个整数 $n$,表示恢复目标状态的最少移动步数。\
>接下来 $n$ 行,每行输出一次移动滑块的操作,格式为:```(x1,y1)->(x2,y2)```,表示让一个滑块从```(x1,y1```,移动到```(x2,y2)```(必须是空格)。
>### 注:输出的最后一行不能有空行!否则即使是对的也会出错!
>如果有多种最优解,移动序列只用输出其中一种(已开启$Special\ Judge$)
否则输出```unsolvable```。
说明/提示
## 样例4解释
其实还有一种解法,视频我放附件里了,输出两种皆可。
### 数据范围
对于 $100\%$ 的数据,输入的数字在 $0-9$ 之间且不重复。
### 关于SPJ
对于每个测评点:
|最短步数是否正确|输出的移动序列是否能还原数字华容道|得分倍率|
|:-:|:-:|:-:|
| ✅ | ✅ | $100\%$ |
| ✅ | ❌ | $50\%$ |
| ❌ | ✅ | $75\%$ |
| ❌ | ❌ | $0\%$ |
- 如果输出的最少移动步数正确,具体移动序列也正确,可得 $100\%$ 的分。
- 如果输出的最少移动步数正确,而具体移动序列不正确,可得 $50\%$ 的分。
- 如果输出的最少移动步数不正确,该测评点不得分。