概述
八数码问题c语言a星算法详细实验报告含代码解析
(13页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
14.9 积分
一、实验内容和要求 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移 和空格下移这四个操作使得棋盘从初始状态到目标状态。 例如:2 28 83 31 12 23 31 16 64 48 84 47 70 05 57 76 65 5(a) 初始状态 (b) 目标状态图 1 八数码问题示意图请任选一种盲目搜索算法(广度优先搜索或深度优先搜索)或任选一种启 发式搜索方法(全局择优搜索,加权状态图搜索,A 算法或 A* 算法)编程求 解八数码问题(初始状态任选)。选择一个初始状态,画出搜索树,填写相应 的OPEN表和CLOSED表,给出解路径,对实验结果进行分析总结,得出结论。二、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。三、实验算法A*算法是一种常用的启发式搜索算法。在 A*算法中,一个结点位置的好坏用估价函数来对它进行评估。A*算法的估价 函数可表示为: f'(n) = g'(n) + h'(n) 这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值(也称为最小耗费 或最小代价) ,h'(n)是 n 到目标的最短路经的启发值。由于这个 f'(n)其实是 无法预先知道的,所以实际上使用的是下面的估价函数:f(n) = g(n) + h(n) 其中 g(n)是从初始结点到节点 n 的实际代价,h(n)是从结点 n 到目标结点的最 佳路径的估计代价。在这里主要是 h(n)体现了搜索的启发信息,因为 g(n)是已 知的。用 f(n)作为 f'(n)的近似,也就是用 g(n)代替 g'(n),h(n)代替 h'(n)。 这样必须满足两个条件:(1)g(n)=g'(n)(大多数情况下都是满足的,可以不用考虑) ,且 f 必须保持单调递增。 (2)h 必须小于等于实际的从当前节点到 达目标节点的最小耗费 h(n) #include #include using namespace std;const int ROW = 3; const int COL = 3; const int MAXDISTANCE = 10000; const int MAXNUM = 10000;int abs(int a) { if (a0) return a; else return -a; }typedef struct _Node{ int digit[ROW][COL]; int dist; // 距离 int dep; // 深度int index; // 索引值 } Node;Node src, dest;vector node_v; // 储存节点 bool isEmptyOfOPEN() { //判断 Open 表是否空 for (int i = 0; i index = node_v[index].index; while (index != 0) {rstep_v.push_back(node_v[index]);index = node_v[index].index; }for (int i = rstep_v.size() - 1; i = 0; i--)cout 0) {Swap(node_up.digit[x][y], node_up.digit[x - 1][y]);if (isExpandable(node_up)) {dist_up = Distance(node_up, dest.digit); node_up.index = index;node_up.dist = dist_up;node_up.dep = node_v[index].dep + 1;node_v.push_back(node_up);} }Node node_down; //下移操作 Assign(node_down, index); int dist_down = MAXDISTANCE; if (x 0) {Swap(node_left.digit[x][y], node_left.digit[x][y - 1]);if (isExpandable(node_left)) {dist_left = Distance(node_left, dest.digit);node_left.index = index;node_left.dist = dist_left;node_left.dep = node_v[index].dep + 1;node_v.push_back(node_left);} }Node node_right; //右移操作 Assign(node_right, index); int dist_right = MAXDISTANCE; if (y number;src.digit[i][j] = number;} src.index = 0; src.dep = 1;cout number;dest.digit[m][n] = number;}node_v.push_back(src);while (1) {if (isEmptyOfOPEN()) {cout rstep_v;cout “初始状态:“ endl;cout src endl;PrintSteps(loc, rstep_v);cout “成功!“ endl;break;}else ProcessNode(loc);} }return 0; }古今名言敏而好学,不耻下问——孔子业精于勤,荒于嬉;行成于思,毁于随——韩愈兴于《诗》,立于礼,成于乐——孔子己所不欲,勿施于人——孔子读书破万卷,下笔如有神——杜甫读书有三到,谓心到,眼到,口到——朱熹立身以立学为先,立学以读书为本——欧阳修读万卷书,行万里路——刘彝黑发不知勤学早,白首方悔读书迟——颜真卿书卷多情似故人,晨昏忧乐每相亲——于谦书犹药也,善读之可以医愚——刘向莫等闲,白了少年头,空悲切——岳飞发奋识遍天下字,立志读尽人间书——苏轼鸟欲高飞先振翅,人求上进先读书——李苦禅立志宜思真品格,读书须尽苦功夫——阮元非淡泊无以明志,非宁静无以致远——诸葛亮熟读唐诗三百首,不会作诗也会吟——孙洙《唐诗三百首序》书到用时方恨少,事非经过不知难——陆游问渠那得清如许,为有源头活水来——朱熹旧书不厌百回读,熟读精思子自知——苏轼书痴者文必工,艺痴者技必良——蒲松龄声明访问者可将本资料提供的内容用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本文档及相关权利人的合法权利。谢谢合作! 关 键 词: 数码 问题 语言 算法 详细 实验 报告 代码 解析
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
最后
以上就是犹豫耳机为你收集整理的c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...的全部内容,希望文章能够帮你解决c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复