AStar算法解决八数码问题(8页).doc
《AStar算法解决八数码问题(8页).doc》由会员分享,可在线阅读,更多相关《AStar算法解决八数码问题(8页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-AStar算法解决八数码问题一、实验目的:修改A*算法,使之能解决N*N矩阵八数码问题问题描述:八数码难题:在33方格棋盘上,分别放置了标有数字1,2,3,4,5,6,7,8的八张牌,初始状态S0可自己随机设定,使用的操作有:空格上移,空格左移,空格右移,空格下移。二、 算法描述:1. 状态描述 八数码的任何一种摆法就是一个状态,所有摆法即为状态集S,他们构成了一个状态空间,其大小为9包括8个数码和一个空格,每个数码就是一个分离的独立的子空间,其所在位置为x:i/3,y:i%3.相应的操作算子就是数码的移动即:将空格向上移UP、将空格向下移DOWN、将空格向左移LEFT、将空格向右移RIGH
2、T,经过一些操作算子后达到目标状态。2. 启发函数设计启发函数为现在的状态中各位置与目标状态各位置数码值不同的个数,例如:现在状态:w=123456780,目标状态为:t=123456708,则h(n)=2.3. 规则的判断条件把未扩展的状态存入open表,排序后取出优先状态扩展搜索,将扩展后的存入closed表,循环执行直到扩展出目标状态。4. 算法流程图5. 核心代码操作算子:int solve()/搜索过程P cur;P p;while(!open.empty()cur=open.top(); /open表open.pop();if(cur.s=t) return cur.id;/达到目
3、标状态,返回当前节点的idint x,y;int ops=0;while(cur.sops!=0) ops+;x=ops/N,y=ops%N; /空格所在位置int r=cur.id;if(x0) /空格向上移p.s=cur.s;swap(p.sops,p.sops-3);if(!mpp.s)p.d=cur.d+1,p.w=calw(p.s),p.id=top+1;open.push(p);stack+top=p.s;fathertop=r;mpp.s=1;if(x0) /空格向左移p.s=cur.s;swap(p.sops,p.sops-1);if(!mpp.s)p.d=cur.d+1,p.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AStar 算法 解决 数码 问题
限制150内