当前位置: 首页 > news >正文

图的遍历(深度优先遍历)- 数据结构和算法59

图的遍历(深度优先遍历)

 

让编程改变世界

Change the world by program


 

图的遍历

  树的遍历我们谈了四种方式,大家回忆一下,树因为根结点只有一个,并且所有的结点都只有一个双亲,所以不是很难理解。 但是谈到图的遍历,那就复杂多了,因为它的任一顶点都可以和其余的所有顶点相邻接,因此极有可能存在重复走过某个顶点或漏了某个顶点的遍历过程。   对于图的遍历,如果要避免以上情况,那就需要科学地设计遍历方案,通常有两种遍历次序方案:它们是深度优先遍历和广度优先遍历。  

深度优先遍历

  深度优先遍历(DepthFirstSearch),也有称为深度优先搜索,简称为DFS。 它的具体思想类似于课程开头讲的找钥匙方案,无论从哪一间房间开始都可以,将房间内的墙角、床头柜、床上、床下、衣柜、电视柜等挨个寻找,做到不放过任何一个死角,当所有的抽屉、储藏柜中全部都找遍,接着再寻找下一个房间。   现在请大家一起来想办法走以下这个迷宫: [caption id="attachment_2550" align="alignnone" width="478"] 深度优先遍历 深度优先遍历[/caption]   我们可以约定右手原则:在没有碰到重复顶点的情况下,分叉路口始终是向右手边走,每路过一个顶点就做一个记号。 接下来有情小甲鱼童鞋带我们走迷宫去。   迷宫走完了,所有的顶点也遍历过了,这就是深度优先遍历! 反应快的童鞋一定会感觉深度优先遍历其实就是一个递归的过程嘛~   如果再细心观察,你会发现整个遍历过程就像是一棵树的前序遍历! [caption id="attachment_2551" align="alignnone" width="600"] 深度优先遍历 深度优先遍历[/caption]  

看动画写代码

  请观看图的深度优先遍历(邻接矩阵实现)的原理动画,结合经验自己先尝试完成代码部分。 小甲鱼将分别提供给大家邻接矩阵和邻接表的实现参考方案: 点击下载 [buy]  获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/BdsUAwI5eABz7I9Rbec']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2013/05/13/3846331.html

相关文章:

  • 网页剪辑有道云笔记、印象笔记(evernote)哪个更好?
  • 定义类C++ primer目录
  • office365组同步问题
  • Tomcat配置数据池
  • 分享:avhttp简介
  • 基本输入输出函数以及其格式.
  • 由装箱引发的——Integer比较的来龙去脉
  • CIO管理札记
  • Centos6.0系统drbd+heartbeat+nfs实现高可用文件存储
  • NO.82 为需求分解任务
  • 插入容器STL学习笔记(八) 序列式容器 共性
  • 数据提交Ajax处理浏览器缓存的问题
  • ThinkPHP实例化模型的四种方法
  • error: Setup script exited with error: Unable to find vcvarsall.bat - 转
  • NSString与int和float的相互转换
  • Asm.js的简单介绍
  • express.js的介绍及使用
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Material Design
  • MaxCompute访问TableStore(OTS) 数据
  • Solarized Scheme
  • WePY 在小程序性能调优上做出的探究
  • 后端_ThinkPHP5
  • 力扣(LeetCode)22
  • 前端路由实现-history
  • 项目实战-Api的解决方案
  • 责任链模式的两种实现
  • 栈实现走出迷宫(C++)
  • Java总结 - String - 这篇请使劲喷我
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​批处理文件中的errorlevel用法
  • #pragma multi_compile #pragma shader_feature
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)STM32单片机上位机
  • (AngularJS)Angular 控制器之间通信初探
  • (BFS)hdoj2377-Bus Pass
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (二)linux使用docker容器运行mysql
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (五)Python 垃圾回收机制
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET导入Excel数据
  • .NET命名规范和开发约定
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [Angular] 笔记 18:Angular Router
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [C#C++]类CLASS
  • [C/C++]数据结构 循环队列
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能