BFS算法的实验范例(java)

最近一直都在学习BFS算法,故作此来梳理一下。

首先先介绍一下BFS,BFS(Breadth-first-search)广度优先搜索,又称为宽度优先搜索,是图的搜索算法之一。与深度优先搜索不同的是,广度优先搜索会先搜索到与起始点距离比较近的点,而深搜却是沿着一个分支递归到最后。

系统的扯一下~

给定图G和一个原点s,按照由近及远的顺序,BFS遍历逐层访问s可达的所有节点,并计算从s到各节点的距离(即s至各节点的路径上的边数),其中s至节点v的距离值:(v∈V)

1.当s与v间不连通时,d[v]=-1

2.当s与v间连通时,d[v]=s与v间的最短路长

初始的时候,d[s]=0,其他节点的d值为-1,广度优先遍历过程如下:

顺序处理每个已访问的节点u:遍历访问所有与u邻接的未访问的节点v((u,v)∈E,d[v]==-1)。由于u是v的父亲或者前驱,因此v的距离值d[v]=d[u]+1。(划重点,+1的原因)

由于是按照层次进行的,且通过“先进先出”的原则来实现,此时可以使用队列(下篇博文会提及到)。拟定一个队列Q,按照先后顺序存储被访问过的节点,步骤如下:

1.首先源点s入队列Q,d[s]=0;

2.然后依次访问所有与s相邻的未被访问过的节点v((u,v)∈E,d[v]==-1),d[v]=d[s]+1=1,并将v加入队列Q中;

3.接下来按照先进先出的原则来扩展队首的节点,每扩展一个队首节点u,节点u出队列,所有与u相邻的未被访问的节点v((u,v)∈E,d[v]==-1)入队列Q其距离值为d[v]=d[u]+1;

4.依次类推,直至队列Q为空。

BFS遍历从源点s出发,由近及远,依次访问和s有路径相连且路长为1,2,3.....的节点,最终形成一颗以s为根的BFS遍历树。

其算法如下:

void bfs(vlink g[],int v){
s int w;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值