41 数据结构笔记之四十一图的遍历之深度优先

41  数据结构笔记之四十一图的遍历之深度优先

“对于我来说 , 生命的意义在于设身处地替人着想 , 忧他人之忧 , 乐他人之乐。爱因斯坦”

上篇我们实现了图的邻接多重表表示图,以及深度遍历和广度遍历的代码,这次我们先来看下图的深度遍历。

 

1.  原理

图遍历又称图的遍历,属于数据结构中的内容。指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的许多其它操作都是建立在遍历操作的基础之上

由于图结构本身的复杂性,所以图的遍历操作也较复杂,主要表现在以下四个方面:

① 在图结构中,没有一个“自然”的首结点,图中任意一个顶点都可作为第一个被访问的结点。

② 在非连通图中,从一个顶点出发,只能够访问它所在的连通分量上的所有顶点,因此,还需考虑如何选取下一个出发点以访问图中其余的连通分量。

③ 在图结构中,如果有回路存在,那么一个顶点被访问之后,有可能沿回路又回到该顶点。

④ 在图结构中,一个顶点可以和其它多个顶点相连,当这样的顶点访问过后,存在如何选取下一个要访问的顶点的问题。

 

2.  深度优先遍历

 

基本思想:首先从图中某个顶点v0出发,访问此顶点,然后依次从v0相邻的顶点出发深度优先遍历,直至图中所有与v0路径相通的顶点都被访问了;若此时尚有顶点未被访问,则从中选一个顶点作为起始点,重复上述过程,直到所有的顶点都被访问。可以看出深度优先遍历是一个递归的过程。

   如下图1中的一个无向图

   《41 数据结构笔记之四十一图的遍历之深度优先》

  其深度优先遍历得到的序列为:

  0->1->3->7->4->2->5->6

 

 

3.  代码实现

代码是40节代码的一部分。

共5个点1,2,3,4,5

其中1和2,1和3,链接

2和1,2和3,2和4链接

3和1,3和2,3和4链接

4和2,4和3链接。

3.1      dfstraverse

设置标志数组原始初始化为0.

然后dfs函数。

 

3.2      dfs

从第V个顶点出发,递归地深度优先遍历图。

遍历过的点设置标志位1.

然后调用visitvex函数,输出顶点值。

           然后每次调用nextadjvex获取下一个邻接点,然后查看是否已经输出,如果没有输出则dfs进行递归。

void dfs(amlgraphG,intv)

{

           intw,p=1;

           visitedvexes[v]=1;

           visitvex(G,v);//输出顶点的值

 

           for(w=firstadjvex(G,v);w>0;w=nextadjvex(G,v,w))

                     if(!visitedvexes[w])//对没有访问过的定点调用dfs

                                dfs(G,w);

}

3.3      firstadjvex

寻找V的第一个邻接点W

如果不存在顶点则返回-1.

如果村现在,则判断是否存在邻接点。

如果存在邻接点,判断ivex是否是v,如果是则返回边的另一个点,如果不是则返回该点。

3.4      nextadjvex

返回V的下一个邻接点(相对于W)

主要判断方法是:

每次以V结点所在的链表开始,找下一个如果下一个节点的ivex和v相等则使用ilink连接。如果下一个节点的jvex和v相等则使用jlink链接。这样找的都是和v顶点所连接的点。直到链表为空。

           代码中v表示当前点进行范围遍历,w表示当前和v点相邻的点,w进行小范围遍历。

           代码中先从V=2,开始(即输入遍历节点2),然后W=4,

接着递归V=4,W=3

递归 V=3,W=4

V=3,W=2,

V=3,W=1

V=1,W=3

V=1,W=2

V=4,W=2

V=2,W=3

V=2,W=1

规则的写就是:

V=2, W=4

           V=4,W=3

                     V=3,W=4

                     V=3,W=2

                     V=3,W=1

                                V=1,W=3

                                V=1,  W=2

           V=4,W=2

V=2, W=3

V=2,W=1

结束。

3.5      visitvex

输出点的值。

4.  源码

源码还是参考40节的笔记。

 

 

 

 

 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/notbaron/article/details/78057026
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞