网站大量收购独家精品文档,联系QQ:2885784924

一深度优先搜索遍历算法.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一深度优先搜索遍历算法.doc

广度优先搜索算法 一.宽度优先搜索的过程 宽度优先搜索算法是最简便的图搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。……,如此依次扩展,检查下去,直到发现目标节点为止。即 1、从图中的某一顶点V0开始,先访问V0;V0相邻接的顶点V1,V2,......,Vt;V1,V2,......,Vt相邻接的所有未曾访问过的顶点;Program Bfs; 初始化,初始状态存入OPEN表; 队列首指针head:=0;尾指针tail:=1; repeat 指针head后移一位,指向待扩展结点; for I=1 to max do {max为产生子结点的规则数} begin if 子结点符合条件 then begin tail指针增1,把新结点存入列尾; if新结点与原已产生结点重复then删去该结点(取消入队,tail减1) else if新结点是目标结点then输出并退出; end; end; until(tail=head); {队列空} 三、广度优先搜索注意事项: 1、每生成一个子结点,就要提供指向它们父亲结点的指针。当解出现时候,通过逆向跟踪,找到从根结点到目标结点的一条路径。 2、生成的结点要与前面所有已经产生结点比较,以免出现重复结点,浪费时间,还有可能陷入死循环。 3、如果目标结点的深度与“费用”(如:路径长度)成正比,那么,找到的第一个解即为最优解,这时,搜索速度比深度搜索要快些;如果结点的“费用”不与深度成正比时,第一次找到的解不一定是最优解。 4、广度优先搜索的效率还有赖于目标结点所在位置情况,如果目标结点深度处于较深层时,需搜索的结点数基本上以指数增长。 下面我们看看怎样用宽度优先搜索来解决八数码问题。 例如 图2给出广度优先搜索应用于八数码难题时所生成的搜索树。搜索树上的所有结点都标记它们所对应的状态,每个结点旁边的数字表示结点扩展的顺序。粗线条路径表明求得的一个解。从图中可以看出,扩展26个结点和生成46个结点之后,才求得这个解。此外,直接观察此图表明,不存在有更短走步序列的解。  广度优先搜索图                          Program BFS; data;数据库赋初值; H:=0;队列尾指针L:=1; repeat     取下一个H所指的结点; for i:=1 to max do {i为产生新结点规则编号} begin      L增1,把新结点存入数据库队尾;记录父结点的位置;  if then       删去该结点(L减1) else        if 新结点为目标结点 then      end; end; until H=L {队列为空}program 8no_bfs; {八数码的宽度优先搜索算法} Const Dir : array[1..4,1..2]of integer       {四种移动方向,对应产生式规则} = ((1,0),(-1,0),(0,1),(0,-1)); N=10000; Type T8No = array[1..3,1..3]of integer; TList = record Father : integer;            {父指针} dep : byte;   {深度} X0,Y0 : byte; {0的位置} State : T8No;            {棋盘状态 } end; Var Source,Target : T8No; List : array[0..10000] of TList; {综合数据库 } Closed,Open,Best : integer { Best表示最优移动次数} Answer : integer; {记录解} Found : Boolean; {解标志} procedure GetInfo; {读入初始和目标节点} var i,j : integer; begin for i:=1 to 3 do for j:=1 to 3 do read

文档评论(0)

18273502 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档