电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Astar算法八数码问题C++报告+代码+详细注释

Astar算法八数码问题C++报告+代码+详细注释_第1页
1/8
Astar算法八数码问题C++报告+代码+详细注释_第2页
2/8
Astar算法八数码问题C++报告+代码+详细注释_第3页
3/8
二、程序运行测试 A*算法求解八数码问题 一、 详细设计说明 1. 评价函数 以当前状态下各将牌到目标位置的距离之和作为节点的评价标准。距离的定义为:“某将牌行下标与目标位置行下标之差的绝对值 + 列下标与目标位置列下标之差的绝对值”。距离越小,该节点的效果越好。某个状态所有将牌到目标位置的距离之和用“h 值”表示。 2. 主要函数 2.1 countH(state & st); countH 函数功能是计算st 状态的h 值。 计算过程中将会用到rightPos 数组,数组里记录的是目标状态下,0~9 每个将牌在九宫格里的位置(位置 = 行下标 * 3 + 列下标)。 2.2 f(state * p); f()=h()+level 2.3 look_up_dup(vector & vec, state * p); 在open 表或close 表中,是否存在指定状态p,当找到与p 完全相等的节点时,退出函数。 2.4 search(state & start); 在open 表不为空时,按f 值由小到大对open 表中元素进行排序。 调用findZero()函数找到0 值元素的位置。空格可以向上下左右四个方向移动,前提是移动后不能越过九宫格的边界线。确定某方向可走后,空格移动一步,生成状态p’。 此时,检查 open 表中是否已有p’,若有,更新 p’数据;检查 close 表中是否已有p’,若有,将p’从 close 表中删除,添加到open 表中。 重复的执行这个过程,直到某状态的h 值为零。 2.5 dump_solution(state * q) ; 在终端输出解路径。 // A*算法 八数码问题 #include "stdafx.h" #include #include #include #include using namespace std; const int GRID = 3; //Grid表示表格的行数(列数),这是3*3的九宫格 int rightPos[9] = { 4, 0, 1, 2, 5, 8, 7, 6, 3 }; //目标状态时,若p[i][j]=OMG,那么3*i+j = rightPos[OMG] struct state{ int panel[GRID][GRID]; int level; //记录深度 int h; state * parent; state(int level) :level(level){} bool operator == (state & q){ //判断两个状态是否完全相等(对应位置元素相等),完全相等返回true,否则返回false for (int i = 0; i

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Astar算法八数码问题C++报告+代码+详细注释

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群