大话数据结构 -07-2 图的遍历

图的遍历

1. 定义:

从图中某一个顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历。

2. 标记:

为了防止一个结点被多次访问,而其他结点没有被访问的情况。因此需要对访问过的结点打上标记,设置一个访问数组visited[n],n是图中顶点的个数,初值为0,访问过后设置为1。

通常有两种遍历次序方案:深度优先遍历与广度优先遍历。

3. 深度优先遍历

遍历过程:(类似于树的前序遍历)

【1】前进:从结点A出发,始终向右手边走(A的右手边是B),当右手边的结点是已经走过的结点时(标记过),退回上一个结点,选择次右结点。

【2】退回:一直到找到的某一个结点其相邻的所有结点都已经遍历。则执行退回操作。一直退回到最初的节点,终止。

A->B->C->D->E->F->A(已经遍历过)->F(退回到F)->G->B(已经遍历过)->G->D(已经遍历过)->G->H

注意此时结点并没有被全部遍历,执行回退操作

H(无通道没走过)->G(无通道没走过)->F(无通道没走过)->E(无通道没走过)->D->I(没有走过该通道)->D(无通道没走过)->C(无通道没走过)->B(无通道没走过)->A(返回最初顶点)

代码:(是一个递归过程)

使用邻接矩阵存储结构

使用邻接表存储

 

 

4. 广度优先遍历

 

代码:

 使用邻接矩阵存储结构

 

使用邻接表存储

 

讨论;

图的深度优先遍历与广度优先遍历,时间复杂度是一样的,不同之处仅仅在于对顶点的访问顺序不同。

深度优先更适合目标比较明确,以找到目标为主要目的的情况,而广度优先更适合在不断扩大遍历范围时找到相对最优解的情况。

 

转载于:https://www.cnblogs.com/GuoXinxin/p/10156860.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值