图的广度优先遍历

本文介绍了图的广度优先遍历(BFS)算法,强调了在处理可能含有环的图时,如何避免重复访问顶点。通过一个实例展示了从顶点2开始的BFS过程,解释了为何需要标记已访问顶点以防止无限循环。还提供了广度优先遍历的邻接表实现,并指出在非连通图中可能需要以每个顶点为起点进行遍历。BFS的时间复杂度为O(V+E),其中V是顶点数,E是边数。
摘要由CSDN通过智能技术生成

图的bfs和树的bfs类似。与树不同图可能包含环,所以可能再次访问同一顶点。为了避免访问同一顶点多次,我们用一个布尔数组标志顶点是否被访问过。为了简化,我们假定从起始顶点可达所有顶点。

如下图,我们从顶点2开始遍历。当我们遍历到顶点0,查找他的所有相邻顶点。2也是0的一个相邻顶点。如果不标记访问过得顶点,那么顶点2将被再次处理,遍历将变得不可终止。下图的广度优先遍历的结果为2,0,3,1。
在这里插入图片描述
下面是广度优先遍历的一个简单实现。图用邻接表表示。List用来存储相邻节点,广度优先遍历需要一个队列。

package com.lixusheng.study.graph;


import java.util.Iterator;
import java.util.LinkedList;

/**
 * 这个类用邻接表代表一个有向图
 */
public class MyGraph {
   

    //图的顶点数
    private int v;

    //邻接表
    private LinkedList<Integer>[] adj;

    //构造方法
    public MyGraph(int v){
   
        this.v = v;
        adj = new LinkedList[v];
        for 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiutianmuzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值