图——图的遍历(DFS与BFS算法详解)

前面的文章中我们学习了图的基本概念和存储结构,大家可以通过下面的链接学习:

图的定义和基本术语

图的类型定义和存储结构

这篇文章就来学习一下图的重要章节——图的遍历。

目录

一,图的遍历定义:

二,深度优先搜索(DFS)

连通图的深度优先遍历

邻接矩阵法实现DFS

邻接表法实现DFS

DFS算法效率分析:

非连通图的深度优先遍历

三, 广度优先搜索(BFS)

邻接矩阵法实现BFS

邻接表法实现BFS

 BFS算法效率分析:

DFS与BFS算法效率比较


一,图的遍历定义:

        从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算

图遍历的实质:找每个顶点的邻接点的过程。

要进行图的遍历,我们需要知道图的特点,从而用合适,高效的方法来实现遍历。

图有哪些特点?

图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点 

那么,如何避免在遍历时重复访问?

解决思路:

设置辅助数组 visited [n ],用来标记每个被访问过的顶点。

        初始状态为0

        被访问,改 visited [i]1,防止被多次访问。

图常用的遍历有两种:

深度优先搜索(Depth First Search,DFS    

广度优先搜索(Breadth First Search,BFS)    

二,深度优先搜索(DFS)

引例:

点亮迷宫中所有的灯,我们会一条道走到头,如果走不动了,再往回退寻找其他没有走过的。

因此我们可以总结DFS的详细归纳:

在访问图中某一起始顶点 v 后,由 v 出发,访问 它的任一邻接顶点 w 1
再从 w 1 出发DFS 邻接 但还 未被访问 过的顶点 w 2
然后再从 w 2 出发,进行类似的访问,
如此进行下去,直至到达所有的邻接顶点都被访问过的顶点 u 为止。
接着,退回一步, 退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。
          如果有, 则访问此顶点,之后再从此顶点出发,进行与前述类似的访问。    

         如果没有,再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值