一起talk C栗子吧(第四十四回:C语言实例--深度优先遍历一)


各位看官们,大家好,上一回中咱们说的是图的例子,这一回咱们说的例子是:深度优先遍历。闲话休提,

言归正转。让我们一起talk C栗子吧!


看官们,我们在上一回中说了如何在代码中存储图,这一回咱们主要说在代码中如何遍历图。首先选择图

中某个点做为起点,然后遍历与该点相连而且没有被访问的点,重复该操作,直到图中所有的点都被访问

过为止,这种遍历方法叫作深度遍历。从该方法的描述中,就能发现,使用递归来实现该方法是个不错的

选择,下面是具体的实现步骤:


  • 1.使用邻接矩阵存放图,邻接矩阵中位于行和列上面点的顺序可以自己定义;
  • 2.把图中点的名称按照点在邻接矩阵中行或者列上的顺序存放一个数组中;
  • 3.使用一个数组来标记各个点是否被访问过,数组的大小为图中点的数量;
  • 4.按照邻接矩阵中点行或者列上点的顺序,选取一个点依次遍历图;
  • 5.查看步骤3中的数组,如果步骤4中选取的点已经被访问过,那么回到步骤4选择下一个点,否则进入步骤6;
  • 6.在步骤3中的数组中标记该点已经被访问过;
  • 7.找到该点在邻接矩阵中的位置,然后从邻接矩阵中查找该点与其它点之间是否有路径;
  • 8.如果步骤7中的点与其它的点没有路径,或者其它点已经被访问过,那么选择下一个点,否则进入步骤9;
  • 9.重复步骤6到步骤8,直到所有点都被遍历过为止。


看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。


我们在程序中使用的图和该图的邻接矩阵如下图所示:

       


程序的运行结果如下,对比运行结果和图,可以发现程序完全是按照图中结点深度进行遍历的。

--- Show the Graph ---

0 |1 |1 |0 |0 |0 |
1 |0 |0 |0 |1 |0 |
1 |0 |0 |1 |0 |1 |
0 |0 |1 |0 |0 |0 |
0 |1 |0 |0 |0 |1 |
0 |0 |1 |1 |1 |0 |

--- DFS ---
A->B->E->F->C->D->


各位看官,关于深度优先遍历的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

talk_8

真诚赞赏,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值