图的基本算法(二、广度优先搜索)

本文介绍了广度优先搜索(BFS)的基本概念及其在图搜索中的应用。BFS能够有效地找到从起始节点到所有可达节点的最短路径,并构建广度优先树。适用于有向图和无向图。

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

广度优先搜索是最简单的图搜索算法之一;在Prim 最小生成树算法和Dijkstra 单源最短路径算法中都采用了广度优先搜索的类似思想;

—————————————————————————————————————————————————

在给定图G = (V, E)和一个特定的源顶点s 的情况下,广度优先搜索系统的探索G 中的边,以其“发现”可以从s 到达的所有顶点,并计算s 到所有这些可达顶点之间的距离(即最少的边数);同时还能生成一棵根为s、且包括所有s的可达顶点的广度优先树;

—————————————————————————————————————————————————

对从s可达的任意顶点v,广度优先树中从s到v的路径对应于图G中从s到v的一条最短路径;该算法对有向图、无向图同样合适; 

—————————————————————————————————————————————————

算法会首先发现和s距离为k的所有顶点,才会发现距离为k+1的其他顶点;

—————————————————————————————————————————————————

在算法中用3中颜色区分点;如果(u,v)存在,且顶点u为黑色,则顶点v为黑色或者是灰色;也就是说,与黑色相邻的点都是被发现了的;而灰色的顶点可能会有一些白色的相邻的顶点,它们代表了已发现与未发现的顶点的边界;

—————————————————————————————————————————————————

对于每个顶点u ∈V,其色彩存储于变量color[u]中, u的父母存于变量π[u]中,如果u没有父母(例如u = s或者是尚未被发现),则π[u] = NIL.该算法计算出来的源顶点s 和顶点u之间的距离存于d[u]中;算法还涉及了一个先进先出队列Q来管理所有的灰色顶点;

广度优先搜索伪代码:


入队和出队操作只需要O(1)的时间,因此队列操作的总时间为O(V); 因为只有当每个顶点将出队列时,才会扫描其邻接表,因而每个顶点的邻接表至多被扫描一次,由于所有邻接表的长度之和Θ(E),故扫描所有邻接表所花费的全部时间为O(E).初始化时间为O(V),于是BFS过程的总的运行时间为O(V + E)

—————————————————————————————————————————————————



—————————————————————————————————————————————————



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值