- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
八数码难题详解广度搜索
【例题】八数码难题(Eight-puzzle)。在3X3的棋盘上,摆有 8个棋子,在每个棋子上标有1~8中的某一数字。棋盘中留有一个空格。空格周围的棋子可以移到空格中。要求解的问题是,给出一种初始布局(初始状态)和目标布局(目标状态),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。初始状态和目标状态如下:
初始状态 目标状态
2 8 3 1 2 3
1 6 4 8 4
7 5 7 6 5
求解本题我们可以分3步进行。??? 问题分析:??? 由于题目要找的解是达到目标的最少步骤,因此可以这样来设计解题的方法:??? 初始状态为搜索的出发点,把移动一步后的布局全部找到,检查是否有达到目标的布局,如果没有,再从这些移动一步的布局出发,找出移动两步后的所有布局,再判断是否有达到目标的。依此类推,一直到某布局为目标状态为止,输出结果。由于是按移动步数从少到多产生新布局的,所以找到的第一个目标一定是移动步数最少的一个,也就是最优解。??? 建立产生式系统:??? (1)综合数据库。用3X3的二维数组来表示棋盘的布局比较直观。我们用Ch[i,j]表示第i行第j列格子上放的棋子数字,空格则用0来表示。为了编程方便,还需存储下面3个数据:该布局的空格位置(Si,Sj);初始布局到该布局的步数,即深度dep;以及该布局的上一布局,即父结点的位置(pnt)。这样数据库每一个元素应该是由上述几个数据组成的记录。??? 在程序中,定义组成数据库元素的记录型为:Type? node=record??? ch:array[1..3,1..3] of byte;{存放某种棋盘布局}??? si,sj:byte; {记录此布局中空格位置}??? dep,pnt:byte;? end;??? 因为新产生的结点深度(从初始布局到该结点的步数)一般要比数据库中原有的结点深度大(或相等)。按广度优先搜索的算法,深度大(步数多)的结点后扩展,所以新产生的结点应放在数据库的后面。而当前扩展的结点从数据库前面选取,即处理时是按结点产生的先后次序进行扩展。这样广度优先搜索的数据库结构采用队列的结构形式较合适。我们用记录数组data来表示数据库,并设置两个指针:Head为队列的首指针,tail为队列的尾指针。??? (2)产生规则。原规则规定空格周围的棋子可以向空格移动。但如果换一种角度观察,也可看作空格向上、下、左、右4个位置移动,这样处理更便于编程。设空格位置在(Si,sj),则有4条规则:??? ①空格向上移动: if si-1=1 then ch[si,sj]:=ch[si-1,sj];ch[si-1,sj]:=0??? ②空格向下移动: if si+1=3 then [si,sj]:=ch[si+1,sj];ch[si+1,sj]:=0??? ③空格向左移动: if sj-1=1 then [si,sj]:=ch[si,sj-1];ch[si,sj-1]:=0??? ④空格向右移动: if sj+1=3 then [si,sj]:=ch[si,sj+1];ch[si,sj+1]:=0??? 我们用数组Di和Dj来表示移动时行列的增量,移动后新空格的位置可表示为:??? nx:=si+di(r)??? ny:=sj+dj(r)其中,r=1,2,3,4为空格移动方向,且
r 1 2 3 4
方向 左 上 右 下
di 0 -1 0 1
dj -1 0 1 0
??? (3)搜索策略。按照问题分析中提出的方法,算法设计如下:
program num8;??? 程序中新布局与队列中已有布局是否重复,用dup函数检查;找到目标结点后,print过程负责打印出从初始态到目标态移动时各步的布局,buf[n)是用来存放待输出的布局在队列中的位置。
procedure print;
??? 根据上述算法编制的程序如下:program num8_str1;uses Crt;type a33:array[1..3,1..3] Of byte;? {3X3的二维数组,用于存放棋盘布局}a4=array[1..4] of shortint;node=record {定义数据库中每个元素记录类型结构}???? ch: a33;???? si, sj: byte;???? pnt, dep: byte;? end;? const goal:a33 = ((
您可能关注的文档
- 健康养生从吃开始.doc
- 健康养生知识脑中风预防.doc
- 健康安全风险评价的“矩阵法”.doc
- 健康教育培训材料.doc
- 健康教育的知识素材.docx
- 健康知识教程 常见慢性病预防.doc
- 健康评估-体格检查重点.doc
- 健康评估复习习题整理.doc
- 健康食物的营养和功能汇总.doc
- 健身俱乐部经营管理方案.doc
- 绿电2022年系列报告之一:业绩利空释放,改革推动业绩反转和确定成长.docx
- 化学化工行业数字化转型ERP项目企业信息化规划实施方案.pdf
- 【研报】三部门绿电交易政策解读:溢价等额冲抵补贴,绿电交易规模有望提升---国海证券.docx
- 中国债券市场的未来.pdf
- 绿电制绿氢:实现“双碳”目标的有力武器-华创证券.docx
- 【深度分析】浅析绿证、配额制和碳交易市场对电力行业影响-长城证券.docx
- 绿电:景气度+集中度+盈利性均提升,资源获取和运营管理是核心壁垒.docx
- 节电产业与绿电应用年度报告(2022年版)摘要版--节能协会.docx
- 2024年中国人工智能系列白皮书-智能系统工程.pdf
- 如何进行行业研究 ——以幼教产业为例.pdf
文档评论(0)