42. 数据结构笔记之四十二图的遍历之广度优先

42. 数据结构笔记之四十二图的遍历之广度优先

“生活真象这杯浓酒 , 不经三番五次的提炼呵 , 就不会这样一来可口 ! — 郭小川”

继续看下广度优先的遍历,上篇我们看了深度遍历是每次一个节点的链表是走到底的。 

1.  原理

首先,从图的某个顶点v0出发,访问了v0之后,依次访问与v0相邻的未被访问的顶点,然后分别从这些顶点出发,广度优先遍历,直至所有的顶点都被访问完。

   如上面图1

《42. 数据结构笔记之四十二图的遍历之广度优先》

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

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

2.  代码实现

具体代码查看40节。

 

2.1      定义结构

/*队列的链式存储结构*/

typedefstructqnode

{

           int    data;

           structqnode*next;

}qnode,*queueptr;

 

typedefstruct

{ queueptr front;

queueptr rear;/*队头、队尾指针*/

}linkqueue;

 

 

2.2      bfstraverse

5个顶点为1,2,3,4,5

边连接是 1和2,1和3,2和3,2和4,3和4 连接。

遍历开始从顶点2开始。

同深度遍历,先设置数据为0表示未被查询。

调用initqueue函数置空的队列。

输出节点然后将该节点加入到队列中。

如果队列不为空,得到队列的第一个元素。

具体执行是

U=2,W=4 (4 入队列)

U=2,W=3(3 入队列)

U=2,W=1(1 入队列)

U=4(出队列得到),W=3

U=4,W=2

U=3(出队列得到),W=4

U=3,W=2

U=3,W=1

U=1(出队列得到),W=3

U=1,W=2        

结束

 

2.3      initqueue

构造空队列。

一个队头和创建一个节点。

2.4      enqueue

分配一个节点空间。

加入到队列到尾部中。

 

2.5      queueempty

判断是否为空队列,空则返回TRUE,否则返回FALSE。

2.6      dequeue

若队列不空,删除q的队头元素,用e返回其值

 

2.7      firstadjvex

同上节的深度遍历优先。

2.8      nextadjvex

同上节中的深度遍历优先。

3.  源码

查看第40节

 

 

 

 

 

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