(可修改)DFS及BFS的算法讲解(含例题).ppt

(可修改)DFS及BFS的算法讲解(含例题).ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
相关理论-图的遍历 图是一种灵活的数据结构,一般作为一种模型用来定义对象 之间的关系或联系。对象由顶点(V)表示,而对象之间的关 系或者关联则通过图的边(E)来表示。图可以分为有向图和 无向图,一般用G=(V,E)来表示图。经常用邻接矩阵或者邻接表 来描述一副图图的遍历就是从图中的某个顶点出发,按某种方 法对图中的所有顶点访问且仅访问一次。为了保证图中的顶点 在遍历过程中仅访问一次,要为每一个顶点设置一个访问标志 。通常有两种方法:深度优先搜索(DFS)和广度优先搜索(BFS) ., * ., * 再举一例完全二叉树 练习三序遍历 ., * DFS基本思想 ., * DFS的实现 基本框架 void DFS( Point P ){ for(所有P的邻接点K){ if(K未被访问){ if(k = = e) return true; 标记K; dfs(k); } } } 每次递归到一个点,则检查 是否存在与它相邻,而且未 被访问的点,有则递归访问 这个点,无则返回上一层。 ., * ., * BFS基本思想 ., * BFS基本思想 基本框架 通常用队列(先进先出,FIFO)实现 初始化队列Q. Q={起点s}; 标记s为己访问; while (Q非空) { 取Q队首元素u; u出队; if (u == 目标状态) {…} 所有与u相邻且未被访问的点进入队列; 标记与u相邻的点为已访问; } ., * 两者比较 DFS类似于树的先根遍历,优先访问的是没有访问过的子节点;BFS类似于树的层次遍历,一层一层来访问,所以适合有目标求最短路的步数; DFS/BFS多用于解决连通性问题及最短路问题; 多数情况下运行BFS所需的内存会大于DFS需要的内存(DFS一次访问一条路,BFS一次访问多条路),但DFS容易爆,BFS通过控制队列可以很好解决爆队列风险 ., * 出栈次序 X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。 路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。? X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。 如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种? 为了方便起见,假设检查站可容纳任意数量的汽车。 显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。 现在足足有16辆车啊,亲!需要你计算出可能次序的数目? 这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性文字)。 ., * 典型例题: p1.png ., * ., ., ., ., ., ., ., ., ., ., ., ., 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 DFS/BFS ., * 蛋糕 ., * ., ., ., ., ., ., ., ., ., ., ., ., 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件 精选 课件

文档评论(0)

liuxiaoyu92 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档