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

图就是由一些顶点和连接这些顶点的边组成的。

《图的遍历(一)—深度优先遍历》

例如上图就是由5个顶点(1、2、3、4、5)和5条边(1-2、1-3、1-5、2-4、3-5)组成。

我们从1号顶点开始遍历这个图,遍历就是把图的每一个顶点都访问依次。

深度优先遍历的结果:

《图的遍历(一)—深度优先遍历》

遍历顺序为:

《图的遍历(一)—深度优先遍历》

深度优先遍历的思想:

首先以一个未被访问过的顶点作为起始顶点,沿着当前顶点的边走位未访问过的顶点;当没有未访问过的顶点时,则回到上一个顶点,继续试探访问别的顶点,直到所有的顶点都被访问过。

沿着图的某一个分支遍历直到末端,然后回溯,再沿着另一条进行同样的遍历,直到所有的顶点都被访问过为止。

用邻接矩阵,二维数组e来存储一个图:

《图的遍历(一)—深度优先遍历》

1表示有边,∞表示没有边,自己到自己为0.

无向图的邻接矩阵存储法。无向图指的就是图的边没有方向。无向图的邻接矩阵沿主对角线对称,无向图的特征。

代码如下:

《图的遍历(一)—深度优先遍历》

《图的遍历(一)—深度优先遍历》

《图的遍历(一)—深度优先遍历》

输入:

《图的遍历(一)—深度优先遍历》

运行结果:

《图的遍历(一)—深度优先遍历》


深度优先遍历的应用——城市地图

《图的遍历(一)—深度优先遍历》

有向图,有5个城市,8条公路,(a,b,c)表示从城市a到城市b的路程为c公里,求出1号城市到5号城市的最短路程。

邻接矩阵存储图,规则和上面一样:

《图的遍历(一)—深度优先遍历》

从上图可以观察到一共有3条路径可从1->5:

1-2-3-4-5  长度14

1-2-5        长度9

1-5           长度10

《图的遍历(一)—深度优先遍历》

《图的遍历(一)—深度优先遍历》

《图的遍历(一)—深度优先遍历》

输入数据:

《图的遍历(一)—深度优先遍历》

运行结果:

《图的遍历(一)—深度优先遍历》


    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/wtyvhreal/article/details/43305785
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞