图就是由一些顶点和连接这些顶点的边组成的。
例如上图就是由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
输入数据:
运行结果:
原文地址:http://blog.csdn.net/wtyvhreal/article/details/43305785