0
点赞
收藏
分享

微信扫一扫

图(二)——图的遍历


图的遍历

从图中某个指定的顶点出发, 按照某一原则对图中所有顶点都访问一次, 得到一个由图中所有顶点组成的序列,这一过程称为图的遍历

利用图的遍历,可以:
1、确定图中满足条件的顶点;
2、求解图的连通性问题,如求分量;
3、判断图中是否存在回路;

深度优先遍历(搜索)——DFS

深度优先遍历原则
从图中某个指定的顶点v出发,先访问顶点v,然后从顶点v未被访问过的一个邻接点出发,继续进行深度优先遍历,直到图中与v相通的所有顶点都被访问(1);若此时图中还有未被访问过的顶点,则从另一个未被访问过的顶点出发重复上述过程,直到遍历全图。(递归过程
(1)至此,完成一个连通分量的遍历;
图的深度优先遍历类似于二叉树的前序遍历
要指定出发点,因为不同出发点最后得到的序列可能不同;

图示过程如下:

图(二)——图的遍历_邻接矩阵


算法分析

如果图中具有n个顶点、e条边,则

1、若采用邻接表存储该图,由于邻接表中有2e个或e个边结点,因而扫描边结点的时间为O(e);而所有顶点都递归访问一次,所以,算法的时间复杂度为O(n+e)

2、若采用邻接矩阵存储该图,则查找每一个顶点所依附的所有边的时间复杂度为O(n),因而算法的时间复杂度为O(n*n);

广度优先遍历(搜索)——BFS

广度优先遍历原则
从图中某个指定的顶点v出发,先访问顶点v,然后依次访问顶点v的各个未被访问过的邻接点,然后又从这些邻接点出发,按照同样的规则访问它们的那些未被访问过的邻接点,如此下去,直到图中与v 相通的所有顶点都被访问(1);若此时图中还有未被访问过的顶点,则从另一个未被访问过的顶点出发重复上述过程,直到遍历全图。
(1)完成一个连通分量的遍历;
类似于树的按层次遍历
可以使用队列来实现

图示过程如下:

图(二)——图的遍历_邻接矩阵_02


算法分析:

1、采用邻接表存储该图:O(n+e)

2、采用邻接矩阵存储该图:O(n*n)

如何确定顶点不被重复访问

为了标记某一时刻图中哪些顶点是否被访问,定义一维数组visited[0…n-1],有

图(二)——图的遍历_邻接链表_03


举报

相关推荐

0 条评论