每天坚持做算法题,熟悉基本的套路,巩固语言基础,总结经验记下所学所想。
题目
编号为1~8的8个正方形滑块被摆成3行3列(有一个格子留空),如图7-14所示。每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中,而它原来的位置就成为了新的空格。给定初始局面和目标局面(用0表示空格),你的任务是计算出最少的移动步数。如果无法到达目标局面,则输出-1。
样例输入
2 6 4 1 3 7 0 5 8
8 1 5 7 3 6 4 0 2
样例输出
31
HINT
采用BFS求解,每次保存整体状态而非坐标
代码
1 | typedef int State[9]; //定义"状态"类型 |