题目链接:https://cn.vjudge.net/contest/311091#problem/C
给出一个字符串,表示九宫格此时的状态,问怎么走,能走到九宫格的目标状态(12345678x),如果能走,输出路径(l:往左走,r:往右走,u:往上走,d:往下走),不能走输出unsolvable。
注:拼图的解法,可以用搜索的状态迁移来解决。迁移是整个九宫格的迁移,不是改变哪两个点,哪两个点迁移,改变一次,九宫格就不是原来的九宫格,把整个九宫格迁移。
解析
总体思路:输入的是一行字符串,目标状态是123456780(把x用0表示)。从目标状态出发,变成不是目标状态,记录走的轨迹。对应输入的字符串,找相应的轨迹,倒着输出路径即可。
细节1:每次的状态都是一个长度为9的数字。定义mapu,将能到达的状态映射为1。
细节2:定义mapv,将每个状态的路径,存到字符串中,每次的状态映射为字符串
细节3:
定义结构体
struct node
{
string t;//存路径
int s[3][3];
int x,y;
};
s数组为每次九宫格的状态,(x,y)表示x的坐标。
代码:
#include
#include
#include
#include
#include
#include