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

时间:2015-01-30 16:02:42   收藏:0   阅读:125

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

技术分享

例如上图就是由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

技术分享

技术分享

技术分享


输入数据:

技术分享

运行结果:

技术分享



评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!