【数据结构】图的遍历

图的遍历

从图中某一顶点出发,并系统地访问完图中的所有顶点,且都恰好访问一次的运算操作就被称作 图的遍历
图的遍历理解起来并不是很难,可以分开理解:“遍”意为全部,“历”意为经历、经过,合起来就是:全部顶点都经过一遍

注:为了避免重复访问了同一顶点,通常会使用一个标记数组visited来判断。visited[i]=0时代表还未访问,=1时代表已经访问过

遍历的分类

图的遍历方式分为两种:深度优先遍历与广度优先遍历,二者的时间复杂度都是O(n2)

深度优先遍历

运用:递归,回溯
方式:从起始点(假设是A)出发,并将点A标记好,然后再去访问与A相连,且未被访问过的顶点。一个中间的顶点(假设是B)在访问完B的所有邻接点后,再退回到B的上一个点(假设是C,即访问时由C到B),去访问C的另一个未被访问的邻接点,继续遍历。在选择邻接点遍历的先后时,一般准则是小序号优先
示例
例如对于上面这个无向图进行深度优先遍历,起始点假定为1,程序的步骤为:
先由1 -> 2 -> 3的顺序访问,由于这时候1已经被标记,所以退回到2,再退回到1
从1开始再访问未被访问的点4,由于4没有邻接点,再退回到1
再从1访问未被访问的点5,再退回1
这时起始点的所有邻接点都被访问完毕,遍历结束。

代码实现:

(假设为邻接表存储)

void dfs(int u,int fa)//fa为上一个点
{
   
	if(visited[u])
		return;
	visited[u]=1;
	for(i=head[u];i;i=nxt[i])
	{
   
		if(to[i]=fa)//防止自环
			continue;
		dfs(to[i],u);	
	}
}

广度优先遍历

运用:队列
方式:与广搜BFS相似,所以广度优先遍历一张图,只要在BFS的基础上上稍作改动即可。

代码实现

(假设为邻接表储存)


                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EXGZCWASTAKEN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值