赞
踩
移动步数为5
移动步数为19
移动步数为31
使用盲目搜索中的宽度优先搜索算法,或者使用启发式搜索中的全局择优搜索算法或A*算法解决八数码问题。要求对任意的八数码问题,给出求解过程和求解结果。
例如:对于如图1的具体八数码问题:
要求通过设计启发函数,编程实现求解过程,如果问题有解,给出数码移动过程,否则,报告问题无解。
(以下三个实验任选 1 个完成)
分别记录宽度优先搜索算法、全局择优搜索算法和A*算法的执行时间并比较 3 者的效率。
在启发式搜索中,分别采用四种不同的启发式函数并比较四者的效率,思考如何进一步改进启发式函数。
试分析在所有可能的初始状态和目标状态之间最长的最小移动步骤数是多少?
设计Node节点类,用于存储节点状态。
Node类具有记录八数码状态、深度、启发式函数的代价、逆序数和移动方向的功能。为了便于最后确定搜索路径,还记录了父节点在对象数CLOSED中的下标,以便于递归回溯。
具体的数据存储类型如下:
public class Node { int num[][]=new int [3][3]; //用于存放节点数据 //约束条件: Xi属于{0,1 ,2,3,4,5,6,7,8} 当 i!=j 时,Xi!=Xj。 int depth; //移动步数/深度 int Reverse_order_number; //逆序数 //具有同奇或同偶排列的八数码才能移动可达,否则不可达 int direction;//父节点移动的方向,1 2 3 4 分别为上 下 左 右 //子节点移动的方向不可与父节点相反 //int fatherNode=-2; // 父节点 int worth; //启发式函数的值 private Node father=null; public Node(int n[][],int dep,int Reverse_number,int dir,Node fa,int w) { for (int i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。