数据结构---图的深度优先遍历(DFS)

一、与树的深度优先遍历之间的联系

  1.类似于树的先根遍历。

  递归访问各个结点:

  2.图的深度优先遍历

  先设置一个数组,初始值全部设置为false,先访问一个结点,在用一个循环,依次检查和这个结点相邻的其他结点,在进行更深一层的访问。

  如果是一个非连通的图,则无法遍历完所有结点。 改进方法和广度优先遍历相似。重新读取数组,查看是否还有false的顶点,有,则进行访问,没有则结束。

二、复杂度分析

  空间复杂度:来自函数的调用,最坏的情况,递归深度为O(|V|)  最好为O(1)

  时间复杂度 = 访问各结点所需的时间+探索各边所需的时间。 

  邻接矩阵存储的图的时间复杂度=O(|V|^2)

  邻接表存储的图的时间复杂度= O(|V|+|E|)

三、深度优先生成树

  和广度优先遍历相同, 同一个图的邻接矩阵表示方式唯一,深度优先遍历唯一。

   同一个图邻接表方式不唯一,深度优先遍历序列不唯一。

  深度优先生成树: 与广度一样,去掉多余的边

   同一个图的邻接矩阵表示方式唯一,深度优先遍历唯一,深度优先生成树也唯一。

   同一个图邻接表方式不唯一,深度优先遍历序列不唯一,深度优先生成树也不唯一。

  四、图的遍历和图的连通图 

  对于无向图:进行BFS/DFS遍历调用BFS/DFS函数的次数=连通分量数
对于连通图,只需调用1次 BFS/DFS

对有向图进行BFS/DFS遍历
调用BFS/DFS函数的次数要具体问题具体分析
若起始顶点到其他各顶点都有路径,则只需调用1次BFS/DFS 函数
对于强连通图,从任一结点出发都只需调用1次 BFS/DFS总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值