【实验方案设计】
在设计八数码实验时,首先我们根据 A*算法特点进行了数据结构设计,然后结
合 A*算法设计解决问题的方法,最后设计界面,将解决问题的方法与界面的
触发函数结合,做出美观实用的八数码问题模型。下面将具体解释每一步的
思路、步骤及方法。
1. 数据结构定义:
◎public class Node
用来定义节点的存储结构及节点包含的变量、数据、函数:
a. 变量:
Node prev;//表示该节点的父节点
private int g;//从开始节点到当前结点的路径代价
private int h;//从当前结点到目标节点的估计代价
private int current;//得到当前状态所要移动的数码
private int state[][];//节点的状态
private Direct direction;//得到当前状态所要移动的方向
Node next;//链表中下一个节点
b. 函数:
public Node(Node prev,int[][]a,int[][]b)//构造初始状态
public Node(Node prev,int[][]a,int hChange,int current,Direct direction)//构
造拓展节点
public void changeNode(Node prev,int hChange,int current,Direct
direction)//用来更新链表中已有节点
public boolean equalState(int[][] a)//用来判断当前状态是否与目标状态相同
public void getState(int[][] currentState)//获取当前状态数据
public int getf()//当到当前状态的 f(n)
public int getc()//得到当前状态的 current
public Direct getDirect()//获取当前状态要移动的方向
◎public class Linklist
用来定义链表的存储结构及链表包含的变量、数据、函数
a. 变量:
Node head;//指向头节点
int num;//记录链表中节点的个数
b. 函数:
public Linklist()//构造函数,起到初始化作用
public Node checkSame(int [][]extendState)//检查是否有相同节点
public void AddHead(Node addhead)//增加节点
public void AddNode(Node addnode)//增加节点,有顺序
public boolean DelNode(Node delnode)//删除节点
◎public enum Direct
用来定义移动方向 UP、DOWN、LEFT、RIGHT
UP 表示向上
DOWN 表示向下
LEFT 表示向左
评论0
最新资源