图的广度优先遍历

对于一个无权图G=(V,E),我们采用邻接表表示:

0:1、2、5、6
1:0
2:0
3:4、5
4:3、5、6
5:0、3、4
6:0、4

对于这个图,如何广度遍历呢?

我们使用队列queue这个数据结构。

首先,确定一个起点s(源),接下来对这个点进行操作:push进队列;同时被访问过visited[s] = true

queue:1

然后,将 1 这个点pop出来,同时对 1 的邻接点i遍历,判断没有没访问,将 i 点push进queue,这些邻接点i都设置为被访问过,visited[i] = true

queue:0

重复第二步,将pop(0),foreach(0的邻接点集),判断没有被访问过的点,push,visited[..] = true

queue:2 5 6

直至queue中元素个数为0。

至此完成了对图G的广度遍历。


值得注意的地方:

1、广度遍历也是层序遍历,如果将图拉扯为一棵数的话,那么始终是按照一层一层的顺序遍历,也因此可以找到最短路径

2、对于每个节点何时置其为被访问过

    如果在pop出队列后,算被访问过,那么队列就会出现重复元素,但是不会影响最终结果,queue先后出现:102563444

    如果在push进队列后,算被访问过,那么队列不会出现重复元素,queue先后出现:1025634



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值