一起talk C栗子吧(第四十四回:C语言实例--深度优先遍历一)

各位看官们,大家好,上一回中咱们说的是图的例子,这一回咱们说的例子是:深度优先遍历。闲话休提,

言归正转。让我们一起talk C栗子吧!

看官们,我们在上一回中说了如何在代码中存储图,这一回咱们主要说在代码中如何遍历图。首先选择图

中某个点做为起点,然后遍历与该点相连而且没有被访问的点,重复该操作,直到图中所有的点都被访问

过为止,这种遍历方法叫作深度遍历。从该方法的描述中,就能发现,使用递归来实现该方法是个不错的

选择,下面是具体的实现步骤:

  • 1.使用邻接矩阵存放图,邻接矩阵中位于行和列上面点的顺序可以自己定义;
  • 2.把图中点的名称按照点在邻接矩阵中行或者列上的顺序存放一个数组中;
  • 3.使用一个数组来标记各个点是否被访问过,数组的大小为图中点的数量;
  • 4.按照邻接矩阵中点行或者列上点的顺序,选取一个点依次遍历图;
  • 5.查看步骤3中的数组,如果步骤4中选取的点已经被访问过,那么回到步骤4选择下一个点,否则进入步骤6;
  • 6.在步骤3中的数组中标记该点已经被访问过;
  • 7.找到该点在邻接矩阵中的位置,然后从邻接矩阵中查找该点与其它点之间是否有路径;
  • 8.如果步骤7中的点与其它的点没有路径,或者其它点已经被访问过,那么选择下一个点,否则进入步骤9;
  • 9.重复步骤6到步骤8,直到所有点都被遍历过为止。

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。

我们在程序中使用的图和该图的邻接矩阵如下图所示:

       

程序的运行结果如下,对比运行结果和图,可以发现程序完全是按照图中结点深度进行遍历的。

--- Show the Graph ---

0 |1 |1 |0 |0 |0 |
1 |0 |0 |0 |1 |0 |
1 |0 |0 |1 |0 |1 |
0 |0 |1 |0 |0 |0 |
0 |1 |0 |0 |0 |1 |
0 |0 |1 |1 |1 |0 |

--- DFS ---
A->B->E->F->C->D->

各位看官,关于深度优先遍历的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 19:00:54

一起talk C栗子吧(第四十四回:C语言实例--深度优先遍历一)的相关文章

一起talk C栗子吧(第四十五回:C语言实例--深度优先遍历二)

各位看官们,大家好,上一回中咱们说的是深度优先遍历的例子,这一回咱们继续说:深度优先遍历.闲 话休提,言归正转.让我们一起talk C栗子吧! 大家可能会问:咱们上一回刚刚说了深度优先遍历呀,怎么这一回还说它?看官们莫急,我们在上一回中 说了如何使用深度优先遍历方法去遍历图,在实现该方法时使用的是递归原理.我们在这一回中使用循环 原理来实现深度优先遍历,也就是说这是同一个遍历方法的两种不同实现形式.关于深度优先编译的原理 我就不说了,我们重点说下如何使用循环来实现深度优先遍历.循环说着很容易,但

一起talk C栗子吧(第十二回:C语言实例--单链表一)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们没有说具体的例子,而且是说了例子中的文件组织结构.这一回咱们继续说C例子, 说的例子是链表,更准确的说法叫作单链表.咱们不但要说C例子,而且会在例子中使用上一回中说过的 文件组织结构,就当作是举例说明文件组织结构的使用方法. 有点一石二鸟的感觉,哈哈. 链表定义 看官们,所谓的链表其实就是一组元素通过一定的方式链接在一起.比如我们坐的火车

一起talk C栗子吧(第二十二回:C语言实例--队列一)

各位看官们,大家好,上一回中咱们说的是表达式求值的例子,该例子使用了栈,这一回咱们说的是栈的 兄弟:队列.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在这里说的队列是一种抽象的数据结构,大家不用想的太抽象了,哈哈,其实它和我们日常生活中所 见的队列一样.不管怎么样,我们还是举一个容易理解的例子:大家在假期出去旅游的时候,都有过排队 买门票的经历吧.游客们在售票点的窗口前排成了一长串队列,售票人员先把门票卖给排在队列前面的游 客,买到门票的游客拿着门票兴高采烈地离开了队列,刚来到售票点

NeHe OpenGL教程 第四十四课:3D光晕

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十四课:3D光晕 3D 光晕 当镜头对准太阳的时候就会出现这种效果,模拟它非常的简单,一点数学和纹理贴图就够了.好好看看吧. 大家好,欢迎来到新的一课,在这一课中我们将扩展glCamera类,来实现镜头光晕的效果.在日常生活中,

QT开发(四十四)——流方法解析XML

QT开发(四十四)--流方法解析XML 一.流方法解析XML简介 QT 4.3开始,QT引入了两个新的类来读取和写入XML文档:QXmlStreamReader和QXmlStreamWriter. QXmlStreamReader类提供了一个快速的解析器通过一个简单的流API来读取良构的XML文档,是作为QT的SAX解析器的替代者出现的,比SAX解析器更快更方便.    QXmlStreamReader可以从QIODevice或QByteArray中读取数据.QXmlStreamReader以一

ActionScript3游戏中的图像编程(连载四十四,第3章开始)

3.1 Flash简单滤镜真相大揭秘 上一章,我们用Flash的滤镜仅仅模拟了Photoshop里面的两个简单样式(当然只是我们的参数设置得比较简单,Photoshop样式远比我们想象中的复杂),就已经困难重重,一波三折了,而且效果还不如Photoshop的细致.那么,到底是什么原因导致Flash的简单滤镜如此受限?Flash简单滤镜是如何实现的? 进入本节之前,先明确下简单滤镜的概念,在ActionScript中,滤镜可以分为两大类,简单滤镜和复杂滤镜,前者指可以通过Flash IDE直接设置

【Unity 3D】学习笔记四十四:路径渲染

路径渲染 路径渲染属于特效渲染组件,用于跟随运动中的游戏对象.首先在hierarchy视图中,创建一个球体.然后在菜单导航栏中选择component--effects--trial renderer即可将路径渲染组件添加至该球体对象中. cast shadows:显示阴影效果. receive shadows:接受阴影效果. materials:材质. size:渲染的材质数量,可添加或删除. element 0:渲染材质文件. use light probes:是否使用光线探头. light

Android项目实战(四十四):Zxing二维码切换横屏扫描

原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=".CaptureActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 这时候扫描

“全栈2019”Java第四十四章:继承

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第四十四章:继承 下一章 "全栈2019"Java第四十五章:super关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工