ImageVerifierCode 换一换
格式:PPTX , 页数:23 ,大小:318.39KB ,
资源ID:4311599      下载积分:5 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4311599.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(广优先搜索.pptx)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

广优先搜索.pptx

1、w广度优先搜索的过程广度优先搜索的过程 广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。广度优先算法的核心思想是:从初始节点开始,应用算符生成第一层节点,检查目标节点是否在这些后继节点中,若没有,再用产生式规则将所有第一层的节点逐一扩展,得到第二层节点,并逐一检查第二层节点中是否包含目标节点。若没有,再用算符逐一扩展第二层的所有节点,如此依次扩展,检查下去,直到发现目标节点为止。即 从图中的某一顶点V0开始,先访问V0;访问所有与V0相邻接的顶点V1,

2、V2,.,Vt;依次访问与V1,V2,.,Vt相邻接的所有未曾访问过的顶点;循此以往,直至所有的顶点都被访问过为止。这种搜索的次序体现沿层次向横向扩长的趋势,所以称之为广度优先搜索。w广度优先搜索算法描述:广度优先搜索算法描述:Program Bfs;初始化,初始状态存入队列;队列首指针head:=0;尾指针tail:=1;repeat 指针head后移一位,指向待扩展结点;for I=1 to max do /max为产生子结点的规则数 begin if 子结点符合条件 then begin tail指针增1,把新结点存入列尾;if新结点与原已产生结点重复then删去该结点(取消入队,tai

3、l减1)else if新结点是目标结点then输出并退出;end;end;until(head=tail);/队列为空w广度优先搜索注意事项:广度优先搜索注意事项:1、每生成一个子结点,就要提供指向它们父亲结点的指针。当解出现时候,通过逆向跟踪,找到从根结点到目标结点的一条路径。当然不要求输出路径,就没必要记父亲。2、生成的结点要与前面所有已经产生结点比较,以免出现重复结点,浪费时间,还有可能陷入死循环。3、如果目标结点的深度与“费用”(如:路径长度)成正比,那么,找到的第一个解即为最优解,这时,搜索速度比深度搜索要快些,在求最优解时往往采用广度优先搜索;如果结点的“费用”不与深度成正比时,第

4、一次找到的解不一定是最优解。4、广度优先搜索的效率还有赖于目标结点所在位置情况,如果目标结点深度处于较深层时,需搜索的结点数基本上以指数增长。下面我们看看怎样用宽度优先搜索来解决八数码问题。例如图2给出广度优先搜索应用于八数码难题时所生成的搜索树。搜索树上的所有结点都标记它们所对应的状态,每个结点旁边的数字表示结点扩展的顺序。粗线条路径表明求得的一个解。从图中可以看出,扩展第个结点,总共生成个结点之后,才求得这个解。此外,直接观察此图表明,不存在有更短走步序列的解。【例例1】图4表示的是从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现要找出一条经过城市最少的一条路

5、线。【算法分析算法分析】看到这图很容易想到用邻接距阵来表示,0表示能走,1表示不能走。如图。首先想到的是用队列的思想。a数组是存储扩展结点的队列,ai.city记录经过的城市,ai.pre记录前趋城市,这样就可以倒推出最短线路。具体过程如下:(1)将城市A入队,队首为0、队尾为1。(2)将队首所指的城市所有可直通的城市入队(如果这个城市在队列中出现 过就不入队,可用一个集合来判断),将入队城市的pre指向队首的位置。然后将队首加1,得到新的队首城市。重复以上步骤,直到搜到城市H时,搜索结束。利用pre可倒推出最少城市线路。【参考程序参考程序】Program Ex8_1;const ju:arr

6、ay1.8,1.8 of 0.1=(1,0,0,0,1,0,1,1),(0,1,1,1,1,0,1,1),(0,1,1,0,0,1,1,1),(0,1,0,1,1,1,0,1),(1,1,0,1,1,1,0,0),(0,0,1,1,1,1,1,0),(1,1,1,0,0,1,1,0),(1,1,1,1,0,0,0,1);type node=record /记录定义记录定义 city:char;pre:integer;end;var head,tail,i:integer;a:array 1.100 of node;s:set of A.H;procedure out(d:integer);/输

7、出过程输出过程begin write(ad.city);repeat d:=ad.pre;write(-,ad.city);until ad.pre=0;writeln;end;procedure doit;begin head:=0;tail:=1;a1.city:=A;a1.pre:=0;s:=A;repeat /步骤步骤2 inc(head);/队首加一,出队队首加一,出队 for i:=1 to 8 do /搜索可直通的城市搜索可直通的城市if(juord(ahead.city)-64,i=0)and(not(chr(i+64)in s)then /判断城市是否走过判断城市是否走过 b

8、egin inc(tail);/队尾加一,入队队尾加一,入队 atail.city:=chr(64+i);atail.pre:=head;s:=s+atail.city;if atail.city=H then begin outtail;break;end;end;until head=tail;end;BEGIN /主程序主程序doit;END.输出:输出:H-F-A【例例2】一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列 4 100234500067103456050020456006710000

9、000089有4个细胞。【算法分析算法分析】从文件中读入m*n矩阵阵列,将其转换为boolean矩阵存入bz数组中;沿bz数组矩阵从上到下,从左到右,找到遇到的第一个细胞;将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为FLASE;将h队的队头出队,沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为FLASE;重复4,直至h队空为止,则此时找出了一个细胞;重复2,直至矩阵找不到细胞;输出找到的细胞数。program Ex8_2;const dx:array1.4 of-1.1=(-1,0,1,0);dy:array1.4 of-1.1

10、=(0,1,0,-1);var name,s:string;pic:array1.50,1.79 of integer;bz:array1.50,1.79 of boolean;m,n,i,j,num:integer;h:array1.4000,1.2 of integer;procedure doit(p,q:integer);var i,t,w,x,y:integer;begin inc(num);bzp,q:=false;t:=1;w:=1;h1,1:=p;h1,2:=q;/遇到的第一个细胞入队 repeat for i:=1 to 4 do /沿细胞的上下左右四个方向搜索细胞 begi

11、n x:=ht,1+dxi;y:=ht,2+dyi;if(x0)and(x0)and(yw;/直至队空为止end;begin fillchar(bz,sizeof(bz),true);num:=0;readln(m,n);for i:=1 to m do begin readln(s);for j:=1 to n do begin pici,j:=ord(sj)-ord(0);if pici,j=0 then bzi,j:=false;end;end;for i:=1 to m do for j:=1 to n do if bzi,j then doit(i,j);/在矩阵中寻找细胞 writ

12、eln(NUMBER of cells=,num);readln;end.【例例3】最短路径(1995年高中组第4 题)如下图所示,从入口(1)到出口(17)的可行路线图中,数字标号表示关卡。现将上面的路线图,按记录结构存储如下图6:请设计一种能从存储数据中求出从入口到出口经过最少关卡路径的算法。【算法分析算法分析】该题是一个路径搜索问题,根据图示,从入口(1)到出口(17)可能有多条途径,其中最短的路径只有一条,那么如何找最短路径呢?根据题意,用数组NO存储各关卡号,用数组PRE存储访问到某关卡号的前趋关卡号。其实本题是一个典型的图的遍历问题,我们可以采用图的广度优先遍历,并利用队列的方式存

13、储顶点之间的联系。从入口(1)开始先把它入队,然后把(1)的所有关联顶点都入队,即访问一个顶点,将其后继顶点入队,并存储它的前趋顶点,直到访问到出口(17)。最后,再从出口的关卡号(17)开始回访它的前趋关卡号,直到入口的关卡号(1),则回访的搜索路径便是最短路径。从列表中可以看出出口关卡号(17)的被访问路径最短的是:(17)(16)(19)(18)(1)由此,我们得到广度优先遍历求最短路径的基本方法如下:假设用邻接矩阵存放路线图(aI,j=1表示I与j连通,aI,j=0表示I与j不连通)。再设一个队列和一个表示拓展到哪个顶点的指针变量pos。(1)从入口开始,先把(1)入队,并且根据邻接矩

14、阵,把(1)的后继顶点全部入队,并存储这些后继顶点的前趋顶点为(1);再把pos后移一个,继续拓展它,将其后继顶点入队,并存储它们的前趋顶点,直到拓展到出口(目的地(17);注意后继顶点入队前,必须要检查这个顶点是否已在队列中,如果已经在了就不要入队了;这一步可称为图的遍历或拓展;(2)从队列的最后一个关卡号(出口(17)开始,依次回访它的前驱顶点,倒推所得到的路径即为最短路径。主要是依据每个顶点的前趋顶点倒推得到的。实现如下:I:=1;WHILE NOI 17 DO I:=I+1 ;REPEAT WRITE(,NOI,);WRITE();I:=PREI;UNTIL I=0;【参考程序】留给同

15、学们完成,文件名ex8_3.pas。【例例4】迷宫问题迷宫问题 如下图所示,给出一个N*M的迷宫图和一个入口、一个出口。编一个程序,打印一条从迷宫入口到出口的路径。这里黑色方块的单元表示走不通(用-1表示),白色方块的单元表示可以走(用0表示)。只能往上、下、左、右四个方向走。如果无路则输出“no way.”。入口0-1000000-10000-1000-1-100000-1-1-100-1-100000 出口0000000-1-1【算法分析算法分析】只要输出一条路径即可,所以是一个经典的回溯算法问题,本例给出了回溯(深搜)程序和广搜程序。实现见参考程序。【深搜参考程序深搜参考程序】progr

16、am EX8_4_1;const maxn=50;var map:array 1.maxn,1.maxn of integer;f:boolean;n,m,i,j,desx,desy,soux,souy,totstep:integer;route:array1.maxn of record x,y :integer;end;procedure move(x,y,step:integer);begin mapx,y:=step;/走一步,作标记,把步数记下来 routestep.x:=x;routestep.y:=y;/记路径 if(x=desx)and(y=desy)then begin f:

17、=true;totstep:=step;end else begin if(ym)and(mapx,y+1=0)then move(x,y+1,step+1);/向右 if not f and(xn)and(mapx+1,y=0)then move(x+1,y,step+1);/往下 if not f and(y1)and(mapx,y-1=0)then move(x,y-1,step+1);/往左 if not f and(x1)and(mapx-1,y=0)then move(x-1,y,step+1);/往上 end;end;BEGIN readln(n,m);/n行m列的迷宫 for

18、i:=1 to n do /读入迷宫,0表示通,-1表示不通 begin for j:=1 to m do read(mapi,j);readln;end;write(input the enter:);readln(soux,souy);/入口 write(input the exit:);readln(desx,desy);/出口 f:=false;/f=false表示无解;f=true表示找到了一个解 move(soux,souy,1);if f then for i:=1 to totstep do /输出直迷宫的路径 write(routei:4);else writeln(no w

19、ay.);END.【广搜参考程序广搜参考程序】program EX8_4_2;const maxn=50;u:array1.4 of integer=(0,1,0,-1);w:array1.4 of integer=(1,0,-1,0);var map:array 1.maxn,1.maxn of integer;f:boolean;n,m,i,j,desx,desy,soux,souy,head,tail,x,y:integer;route:array1.maxn of record x,y,pre:integer;end;procedure print(d:integer);begin i

20、f routed.pre0 then print(routed.pre);write(,routed.x,routed.y,);end;BEGIN readln(n,m);/n行行m列的迷宫列的迷宫 for i:=1 to n do /读入迷宫,读入迷宫,0表示通,表示通,-1表示不通表示不通 begin for j:=1 to m do read(mapi,j);readln;end;write(input the enter:);readln(soux,souy);/入口入口 write(input the exit:);readln(desx,desy);/出口出口 head:=0;ta

21、il:=1;f:=false;mapsoux,souy:=-1;routetail.x:=soux;routetail.y:=souy;routetail.pre:=0;while headtail do /队列不为空队列不为空 begin inc(head);for i:=1 to 4 do /4个方向个方向 begin x:=routehead.x+ui;y:=routehead.y+wi;if(x0)and(x0)and(y=m)and(mapx,y=0)then begin /本方向上可以走本方向上可以走 inc(tail);routetail.x:=x;routetail.y:=y;

22、routetail.pre:=head;mapx,y:=-1;if(x=desx)and(y=desy)then /扩展出的结点为目标结点扩展出的结点为目标结点 begin f:=true;print(tail);break;end;end;end;if f then break;end;if not f then writeln(no way!);END.输入输入1 1:输出输出1 1:输入输入2 2:输出输出2 2:8 58 5-1 -1-1 -1-1-1 -1-1 -1-1 0 0 0 0 -1 0 0 0 0 -1-1 -1-1 0 -1-1 -1-1 0 -1-1 0 0 0 -1-

23、1 0 0 0 -1-1 0 0 -1-1-1 0 0 -1-1-1 0 0 0 -1-1 0 0 0 -1-1 -1-1 0 -1-1 -1-1 0 -1-1 0 0 0 -1-1 0 0 0 -12 12 18 48 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 2 3 4 -1 1 2 3 4 -1 -1 -1 -1 5 -1 -1 -1 -1 5 -1 -1 0 7 6 -1 -1 0 7 6 -1 -1 0 8 -1 -1 -1 0 8 -1 -1 -1 0 9 10 -1 -1 0 9 10 -1 -1 -1 -1 11 -1 -1 -1 -1 11 -1 -

24、1 0 0 12 -1 -1 0 0 12 -18 58 5-1 -1-1-1-1-1 -1-1-1-1 0 0 0 0-1 0 0 0 0-1-1 -1-1 0-1-1 -1-1 0-1-1 0 0 0-1-1 0 0 0-1-1 0 0-1-1-1 0 0-1-1-1 0 0 0-1-1 0 0 0-1-1 -1-1-1-1-1 -1-1-1-1-1 0 0 0-1-1 0 0 0-12 12 18 48 4no way.no way.【上机练习上机练习】1、编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的

25、二维数组中,有“*”围住了15个点,因此面积为15。0 0 0 0 0 0 0 0 0 00 0 0 0 *0 0 00 0 0 0 *0 0 *0 00 0 0 0 0 *0 0 *00 0 *0 0 0 *0 *00 *0 *0 *0 0 *00 *0 0 *0 *00 0 *0 0 0 0 *0 00 0 0 *0 00 0 0 0 0 0 0 0 0 0【样例输入样例输入】area.in0 0 0 0 0 0 0 0 0 00 0 0 0 1 1 1 0 0 00 0 0 0 1 0 0 1 0 00 0 0 0 0 1 0 0 1 00 0 1 0 0 0 1 0 1 00 1 0

26、1 0 1 0 0 1 00 1 0 0 1 1 0 1 1 00 0 1 0 0 0 0 1 0 00 0 0 1 1 1 1 1 0 00 0 0 0 0 0 0 0 0 0【样例输出样例输出】area.out 152、细胞、细胞(cell.pas)【问题描述问题描述】一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如阵列:0234500067103456050020456006710000000089有4个细胞。【输入格式输入格式】整数m,n(m行,n列)矩阵【输出格式输出格式】细胞的个数。【输入样例输入样

27、例】cell.in4 100234500067103456050020456006710000000089【输出样例输出样例】cell.out43、营救、营救【问题描述问题描述】铁塔尼号遇险了!他发出了求救信号。距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里。通过侦测,哥伦比亚号获取了一张海洋图。这张图将海洋部分分化成n*n个比较小的单位,其中用1标明的是陆地,用0标明是海洋。船只能从一个格子,移到相邻的四个格子。为了尽快赶到出事地点,哥伦比亚号最少需要走多远的距离。【输入格式输入格式】第一行为n,下面是一个n*n的0、1矩阵,表示海洋地图最后一行为四个小于n的整数,分别表示哥伦比亚号和铁塔尼号的位置。【输出格式】哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。【输入样例输入样例】save.in30011011001 1 3 3【数据范围数据范围】N=1000【输出样例输出样例】save.out4

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服