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

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

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

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


1.  原理

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

   如上面图1


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

  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节

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值