码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-30 11:23:27      阅读:126      评论:0      收藏:0      [点我收藏+]

标签: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->


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


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:c语言   深度优先算法   

原文地址:http://blog.csdn.net/talk_8/article/details/48102417

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!