数据结构课程实践(2)
— 实验准备与设计
一.题目:隐式图的搜索问题
(1)任务要求:
- 对九宫重排问题,建立图的启发式搜索求解方法;
- 用A*算法求解九宫重排问题。
- 3х3九宫棋盘,放置数码为1~8的8个棋子,棋盘中留有一个空格,空格周围的棋子可以移动到空格中,从而改变棋盘的布局。根据给定初始布局和目标布局,移动棋子从初始布局到达目标布局,求解移动步骤并输出。请设计算法,使用合适的搜索策略,在较少的空间和时间代价下找到最短路径。
二.编程语言和软件
编程语言:Java
软件:IntelliJ IDEA
三.项目思路
1.A*算法
A*算法就是通过估值函数求解最优值并执行。
函数形式为f(n)=g(n)+h(n),通过比较各个状态的F(n)的大小,判断最优路径。
g(n)为已经消耗的实际代价,即已经走了的步数。
h(n)为预测路径,即还有几个数字待走。
2.题目思想
通过建立数组存取起始状态和目标状态。
判断给出条件是否可以到目标状态。
寻找到空格位置,通过上下左右移动,寻找最优路径,并在无法到达时返回父状态。
不断往复,直到找到目的状态时停止。
通过计算得到的路径就是最优路径。
其中在判断是否可以达到目标状态时,可以采用计算奇偶性的方法。(放在给出初始状态和目标状态后,防止做无效的运算)