八方块移动游戏要求从一个含8个数字(用1-8表示)的方块以及一个空格方块(用0表示)的3x3矩阵的起始状态开始,
不断移动该空格方块以使其和相邻的方块互换,直至达到所定义的目标状态。
空格方块在中间位置时有上、下、左、右4个方向可移动,在四个角落上有2个方向可移动,在其它位置上有3个方向可移动。
例如,假设一个3x3矩阵的初始状态为:
8 0 3
2 1 4
7 6 5
要求的目标状态为:
1 2 3
8 0 4
7 6 5
则一个合法的移动路径为:
8 0 3 8 1 3 8 1 3 0 1 3 1 0 3 1 2 3
2 1 4 => 2 0 4 => 0 2 4 => 8 2 4 => 8 2 4 => 8 0 4
7 6 5 7 6 5 7 6 5 7 6 5 7 6 5 7 6 5
另外,在所用可能的从初始状态到目标状态的移动路径中,步数最少的路径被称为最短路径;
在上面的例子中,最短路径为5。如果不存在从初始状态到目标状态的任何路径,则称该组状态无解。
请设计算法找到从八方块的某初始状态到某目标状态的所有可能路径的最短路径
- #define WIN32_LEAN_AND_MEAN
- #define _CRT_SECURE_NO_DEPRECATE
- #include <iostream>
- #include <map>
- #include <queue>
- #include <cstring>
- #include <ctime>
- #include <cassert>
- const unsigned int strLength = 9;
- using namespace std;
- // 交换字符串src中 x和y的值,返回被交换后的新串
- char</