版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、问题描述8数码问题又称9宫问题,与游戏“华容道”类似。意在给定的33棋格的8个格子内分别放一个符号,符号之间互不相同,余下的一格为空格。并且通常把8个符号在棋格上的排列顺序称作8数码的状态。开始时,规则给定一个初始状态和一个目标状态,并要求被试者对棋格内的符号经过若干次移动由初始状态达到目标状态,这个过程中只有空格附近的符号可以朝空格的方向移动,且每次只能移动一个符号。为方便编程和表示,本文中8个格子内的符号分别取18的8个数字表示,空格用0表示。并给定8数码的初始状态和目标状态分别如图1、2所示。123456780123456078图2 目标状态图1 初始状态则要求以图1为初始状态,通过
2、交换0和0的上、下、左、右四个方位的数字(每次只能和其中一个交换),达到图2所示目标状态。二、算法设计根据任务要求,本文采用A*搜索算法。但要在计算机上通过编程解决该问题,还应当解决该问题在计算机上表示的方式,并设计合适的启发函数,以提高搜索效率。采用A*算法求解8位码:估价函数:f(n)=g(n)+h(n),其中g(n):从目标节点到当前节点的花费与初始节点s相比,当前节点n中“不在位”的将牌个数之和,h(n):当前节点n到目标节点的花费与目标节点d相比,当前节点n中“不在位”的将牌个数之和。主要搜索过程伪代码如下:创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访
3、问过的节点。算起点的估价值;将起点放入OPEN表;while(OPEN!=NULL) 从OPEN表中取估价值f最小的节点n;if(n节点=目标节点)break;for(当前节点n的每个子节点X) 算X的估价值;if(XinOPEN) if(X的估价值小于OPEN表的估价值)把n设置为X的父亲;更新OPEN表中的估价值;/取最小路径的估价值if(XinCLOSE)if(X的估价值小于CLOSE表的估价值)把n设置为X的父亲;更新CLOSE表中的估价值;把X节点放入OPEN; /取最小路径的估价值if(Xnotin both)把n设置为X的父亲;求X的估价值; 并将X插入OPEN表中;/还没有排序
4、 /endfor将n节点插入CLOSE表中;按照估价值将OPEN表中的节点排序;/实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。/endwhile(OPEN!=NULL)保存路径,即从终点开始,每个节点沿着父节点移动直至起点,这就是你的路径;三、具体实现1、结点编码对于8数码问题,每个结点有8个数字和一个空格,可以将空格看成0,那么一共有9个数字,可以将这9个数字组成一个9位数,即用一个整数表示一个结点对应的信息。2、open表的数据结构表示Open表设置成3*n的矩阵,第一行存储已生成但未扩展的节点,第二行存储第一行节点对应的父节点。3、closed表的数据结构表示clos
5、ed表存储已扩展的结点间的扩展关系,主要用于输出路径。Closed表也是3*n的矩阵,其每一列中三个元素与open表中的意义相同,closed表存储open表中已被扩展的节点。4、程序设计/读入,将8数码矩阵(或整数表示的节点)转换为整数(或矩阵)表示,flag =1时,将8数码矩阵转换为整数,flag=0时,将整数表示的节点转换为整数。function output=read(input,flag)if flag=1 output=0; p=1; for i=1:3 for j=1:3 if input(i,j)=0 index=(i-1)*3+j; else output=output+i
6、nput(i,j)*10p; p=p+1; end end end output=output+index;else output=zeros(3,3); index=mod(input,10); input=(input-index)/10; for i=1:3 for j=1:3 if index=(i-1)*3+j output(i,j)=0; else mid=mod(input,10); output(i,j)=mid; input=(input-mid)/10; end end endend/ 计算两节点之间的距离,这里距离定义为两节点矩阵对应位置不相等的将牌数之和。functio
7、n cnt=distance(mat1,mat2)cnt=0;for i=1:9 if mat1(i)=mat2(i) cnt=cnt+1; endendend/对节点n进行扩展function re=findnode(node)mat=read(node,0);x,y=find(mat=0);xtran=-1, 0, 1, 0;ytran=0, 1, 0, -1;re=; for i=1:4% |1% 4-2% |3 nx = x + xtran(i); ny = y + ytran(i); if nx0&nx0&nylength(cand) break; end cndl=find(can
8、d(cnn)=closedlist(1,:), 1); if isempty(cndl)=1 cand(cnn)=; end end% Otherwise do the following. for cn2=1:length(cand) isinol=find(openlist(1,:)=cand(cn2), 1);% If it is not on the open list, add it to the open list. Make the% current square the parent of this square. Record the F, G, and H% costs o
9、f the square. cnmat=read(cand(cn2),0); curmat=read(curnode,0); if isempty(isinol)=1 candcst=curnodecst+distance(curmat,cnmat)+distance(cnmat,target); widop,lenol=size(openlist); openlist(:,lenol+1)=cand(cn2) curnode candcst; end isinol=find(openlist(1,:)=cand(cn2); n=length(isinol); for i=1:n gcurno
10、de=distance(target,curmat); oldmat=read(openlist(2,isinol(i),0); goldp=distance(target,oldmat); if gcurnode=goldp openlist(2,isinol(i)=curnode; openlist(3,isinol(i)=curnodecst+distance(curmat,cnmat)+distance(cnmat,target); end end end if isempty(find(closedlist(1,:)=d, 1) tiicl=1; end if isempty(openlist=0) openlempty=1; endend %steps(1)=d;nd=d;n=2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程量清单计价课后习题及答案
- 演出服装制作技师考试试卷及答案
- 盐业包装计量封口技师(中级)考试试卷及答案
- 研磨介质筛选技术员岗位招聘考试试卷及答案
- 压缩机性能测试工程师岗位招聘考试试卷及答案
- 2026年河北省武安市高二生物下册期末考试模拟卷【考点提分】附答案
- 2026年河北省辛集市高二生物下册期末考试模拟卷(夺分金卷)附答案
- 2025年辽宁省开原市高二生物下册期末考试模拟卷(易错题)附答案
- 2026年山西省潞城市高二生物下册期末考试考试卷含答案(预热题)
- 2026年山西省潞城市高二生物下册期末考试测试卷含完整答案【必刷】
- 12kV手车式开关柜标准化设计方案
- 2026-2030中国运甲状腺素蛋白行业市场发展趋势与前景展望战略分析研究报告
- 2025年甘肃金昌市地理生物会考真题试卷(+答案)
- 2026年云南校长职级模拟题库及参考答案详解(综合题)
- 2026年高考生物全国二卷试题及答案
- 青春不诈骗2026年高中五一假期反诈防骗指南
- 2025无锡科技职业学院教师招聘考试题目及答案
- 直播带货主播工作制度
- IOTA共识与O-RADS共识指南的解读与分析课件
- 24J113-1 内隔墙-轻质条板(一)
- 自动化项目奖惩制度
评论
0/150
提交评论