2、、下、左、右)相邻的一个数字平移到空格中。用选定的编程语言编写程序,利用不同的搜索策略进行状态空间搜索(如宽度优先搜索、深度优先搜索、有界深度优先搜索等)。三、实验设备及软件VC6.0四、设计方案㈠题目8数码问题㈡设计的主要思路1.基本数据结构分析和实现 ①结点状态 我采用了struct Node数据类型 typedef struct _Node{int digit[ROW][COL];int dist; // distance between one state and the destination一个表和目的表的距离in
3、t dep; // the depth of node深度// So the comment function = dist + dep.估价函数值 int index; // point to the location of parent父节点的位置 } Node;②发生器函数定义的发生器函数由以下的四种操作组成: (1)将当前状态的空格上移Node node_up;Assign(node_up, index);//向上扩展的节点 int dist_up = MAXDISTANCE; (2)将当前状态的空格下移 N
4、ode node_down;Assign(node_down, index);//向下扩展的节点 int dist_down = MAXDISTANCE; (3)将当前状态的空格左移Node node_left;Assign(node_left, index);//向左扩展的节点 int dist_left = MAXDISTANCE; (4)将当前状态的空格右移Node node_right;Assign(node_right, index);//向右扩展的节点 int dist_right = MAXDISTANCE
6、步3 取OPEN表中最前面的结点N放在CLOSE表中,并冠以顺序编号n 步4 若目标结点Sg=N,则搜索成功,问题有解步5 若N无子结点,则转步2 步6 扩展结点N,将其所有子结点配上指向N的放回指针,依次放入OPEN表的尾部,转步2 ㈢主要功能五、主要代码#include #include #include using namespace std; const int ROW = 3;//行数 const int COL = 3;//列数
7、 const int MAXDISTANCE = 10000;//最多可以有的表的数目 const int MAXNUM = 10000; typedef struct _Node{ int digit[ROW][COL]; int dist; // distance between one state and the destination一个表和目的表的距离 int dep; // the depth of node深度 // So the comment function = dist + dep.估价函数值
8、 int index; // point to the location of parent父节点的位置 } Node; Node src, dest;// 父节表 目的表 vector node_v; // store the