(Java)数据结构——图(第三节)BFS的实现

本文详细介绍了广度优先搜索(BFS)的原理,包括搜索过程和“一层一层”搜索的特性,以及在图类中的代码实现,包括获取邻接结点的方法和从特定点开始的BFS过程。同时,文章通过与深度优先搜索(DFS)对比,突出了BFS的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。

广度优先搜索的原理


好了,还是这张图,不过是广度优先搜索

不难看出,就是“一层一层”搜

这次咱从A开始,因为如果从B开始的话,只需要一次,搜索过程就是

B直接搜完,入队A C D E,isVistied全部ture,结束

所以从A开始

A开始,入队B、C,对应isVistited变为true

B出队,遍历,A,C已经遍历过,队尾入D、E,变true

C出队,没新的可入的

D出队

E出队

OK结束

所以,基本原理就是咱上一节说的:我的回合,碰到邻接结点先存起来,我的回合结束,再进入新的回合(队头)

广度优先搜索的代码实现

好了,说完原理,我们来进行代码实现

还是那两个方法

 一个是寻找当前结点的第一个邻接结点

    //获取index行 第一个邻接结点
    public int getFirstNeighbor(int index){
        for(int i = 0;i < vertexList.size();i++){
            if(edges[index][i] != Integer.MAX_VALUE){
                return i;    //找到就返回邻接结点的坐标
            }
        }
        return -1;    //没找到的话,返回-1
    }

另一个就是寻找当前结点的邻接结点的邻接结点(有点抽象,不过请看代码)

    //获取row行 column列之后的第一个邻接结点
    public int getNextNeighbor(int row,int column){
        for(int i = column + 1;i < vertexList.size();i++){
            if(edges[row][i] != Integer.MAX_VALUE){
                return i;    //找到就返回邻接结点的坐标
            }
        }
        return -1;    //没找到的话,返回-1
    }

之后就是主要的从哪个点开始进行BFS,最后那是要格外注意的,先前没有进入递归,因为是我的回合不停下,可以对比DFS,咱就可以理解了。

DFS里面,会调用含参DFS,之后再回到我的回合继续

BFS就是,入队,然后一直是我的回合


    public void BFS(int index,boolea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值