题目链接:http://oj.ecustacm.cn/problem.php?id=1296
题目描述
你玩过华容道的游戏吗?这是个类似的,但更简单的游戏。看下面 3 x 2 的格子
+---+---+---+
| A | * | * |
+---+---+---+
| B | | * |
+---+---+---+
在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵。还有一个格子是空着的。
你可以把一张牌移动到相邻的空格中去(对角不算相邻)。
游戏的目标是:关羽和张飞交换位置,其它的牌随便在哪里都可以。
输入
输入存在多组测试数据,对于每组测试数据:
输入两行6个字符表示当前的局面
思路:
题目问最少需要几次,那么很容易想到利用 BFS 去求解
但是这道题相当于一个图的遍历,隐式图的遍历要注意去重的问题,这也是这道题的一个难点。
这里采用开一个数组 去记录 A B 空格三个的位置(因为它要求其他的无所谓),这样就可以完成去重的任务了
然后我们每次都从空格开始走,和普通的 BFS 是一样的
#include
#include
#include <string>
#include <string.h>
#include
#include
还有一种 DFS 的写法,大致的想法也是差不多的
#include
#include
#include <string>
#include <string.h>
#include
#include