图的深度优先遍历_每天5分钟用C#学习数据结构(24)图 Part 5

7b54b065664d17cdf39d58bd91cc88d4.png

【基础知识】| 作者 / Edison Zhou

这是恰童鞋骚年的第220篇原创文章


上一篇介绍了图的遍历算法之广度优先搜索遍历,本篇我们再来看看非连通图如何实现遍历。

1关于非连通图的遍历

之前我们讨论的图的两种遍历方法都是针对无向连通图的,它们都是从一个顶点触发就能访问到图中的所有顶点。

若无方向图是非连通图,则只能访问到初始点所在连通分量中的所有顶点,其他分量中的顶点是无法访问到的。

如下图所示,V6、V7以及V8三个顶点均访问不到。为此,需要从其他每个连通分量中选择初始点,分别进行遍历,才能够访问到图中的所有顶点。

42760ace34e3222812efd51ba9883223.png

2非连通图的遍历实现

深度优先遍历

/// /// 深度优先遍历接口For非联通图/// public void DFSTraverse4NUG(){    InitVisited();    foreach (var v in items)    {        if (v.isVisited == false)        {            DFS(v);        }    }}

这里DFS方法跟上面无向连通图的保持一致。

广度优先遍历

/// /// 广度优先遍历接口For非联通图/// public void BFSTraverse4NUG(){    InitVisited();    foreach (var v in items)    {        if (v.isVisited == false)        {            BFS(v);        }    }}

这里BFS方法跟上面无向连通图的保持一致。

遍历实现测试

构造的图如上图所示,测试代码如下:

static void MyAdjacencyListTraverseTest(){    Console.WriteLine("------------非连通图的遍历------------");    MyAdjacencyList numAdjList       = new MyAdjacencyList();    // 添加顶点    numAdjList.AddVertex("V1");    numAdjList.AddVertex("V2");    numAdjList.AddVertex("V3");    numAdjList.AddVertex("V4");    numAdjList.AddVertex("V5");    numAdjList.AddVertex("V6");    numAdjList.AddVertex("V7");    numAdjList.AddVertex("V8");    // 添加边    numAdjList.AddEdge("V1", "V2");    numAdjList.AddEdge("V1", "V4");    numAdjList.AddEdge("V2", "V3");    numAdjList.AddEdge("V2", "V5");    numAdjList.AddEdge("V4", "V5");    numAdjList.AddEdge("V6", "V7");    numAdjList.AddEdge("V6", "V8");    Console.Write("深度优先遍历:");    // DFS遍历    numAdjList.DFSTraverse4NUG();    Console.WriteLine();    Console.Write("广度优先遍历:");    // BFS遍历    numAdjList.BFSTraverse4NUG();}

运行结果如下图所示:

6a43e6c1437f17dd0a5ad9a87164f39d.png

3小结

本篇介绍了非连通图如何实现遍历,下一篇,我们来学习一下最小生成树算法。

4参考资料

程杰,《大话数据结构》

陈广,《数据结构(C#语言描述)》

段恩泽,《数据结构(C#语言版)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值