图的遍历。

图的遍历是个啥?
想象一下,你在一个大城市里,想走遍每一个角落,但每个地方只去一次。图的遍历就是这个意思,只不过把城市换成了图,把角落换成了顶点。
为啥要遍历图?
遍历图可以帮助我们了解图是不是连在一起的。如果图是连通的,就像城市里的路都是通的,你可以从任何地方出发,最后走到所有地方。如果不连通,就像有些地方修路不通,你只能走到一部分地方。
广度优先搜索(BFS)怎么玩?
BFS就像你在城市里逛街,先从一家店开始,然后去旁边的几家店,再去这些店旁边的店,一层一层往外扩,直到所有的店都逛过。
深度优先搜索(DFS)又是什么?
DFS就像是你在探险,找到一个洞口就往里钻,直到钻到头了,然后退回来,换个洞口继续钻,直到所有的洞都钻过。
BFS和DFS有啥用?
BFS可以用来找到从一个地方到另一个地方的最短路线,就像你找最近的路去朋友家。
DFS可以帮助我们找到图中的所有路径,就像你探索城市里所有的小巷子。
性能怎么样?
BFS和DFS的时间复杂度基本上是图的顶点数加边数,也就是O(顶点数 + 边数)。
空间复杂度主要是看它们需要多少内存来存东西,BFS可能需要一个队列,DFS可能需要一个栈。
还有啥要注意的?
BFS和DFS生成的树可能不一样,取决于你是按什么顺序访问的。
如果图是连通的,DFS可以生成一棵树;如果不是连通的,DFS会生成一片森林。
 

知识点链接
图的遍历
定义:从图中某一顶点出发,访问图中所有顶点,每个顶点仅被访问一次的过程。
应用:用于判断图的连通性。
对于无向图
如果无向图是连通的,从任一顶点出发可以访问所有顶点。
如果无向图是非连通的,一次遍历只能访问到该顶点所在连通分量的所有顶点。
对于有向图
如果初始点到图中的每个顶点都有路径,则能访问到图中的所有顶点。
广度优先搜索(BFS)
概念:类似于二叉树的层序遍历。
算法思想:
访问起始顶点,然后访问其所有未访问的邻接顶点。
接着访问这些邻接顶点的所有未访问的邻接顶点。
重复以上步骤,直到所有顶点都被访问。
BFS性能分析
时间复杂度:邻接表存储方式为O(|V| + |E|),邻接矩阵存储方式未明确说明。
空间复杂度:O(|V|),因为需要一个队列存储顶点。
广度优先生成树
概念:在广度遍历过程中得到的遍历树。
唯一性:邻接矩阵存储表示唯一,生成树也唯一;邻接表存储表示不唯一,生成树也不唯一。
深度优先搜索(DFS)
概念:类似于树的先序遍历,尽可能深地搜索图。
算法思想:
访问起始顶点,然后访问其邻接且未访问的顶点。
当不能继续访问时,回退到最近访问的顶点,如果还有未访问的邻接顶点,继续搜索。
重复以上步骤,直到所有顶点都被访问。
DFS性能分析
空间复杂度:O(|V|),因为递归需要工作栈。
时间复杂度:邻接矩阵和邻接链表的时间复杂度为O(|V| + |E|)。
深度优先生成树和生成森林
连通图:调用DFS产生深度优先生成树。
非连通图:产生深度优先生成森林。
唯一性:基于邻接表的存储,生成树不唯一。
提示
BFS算法可以解决最短路径问题。
基于邻接矩阵的遍历得到的BFS序列是唯一的,而基于邻接表的遍历序列不唯一。
基于邻接矩阵的遍历得到的DFS序列是唯一的,而基于邻接表的遍历序列不唯一。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值