算法学习-3、BFS——广度优先算法(Breadth First Search)
7
定义:广度优先搜索算法(英语:Breadth-first search,缩写:BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。广度优先搜索的实现一般采用open-closed表。
实现方法:
首先将根节点放入队列中。
从队列中取出第一个节点,并检验它是否为目标。
如果找到目标,则结束搜索并回传结果。
否则将它所有尚未检验过的直接子节点加入队列中。
若队列为空,表示整张图都检查过了——亦即图中没有欲搜索的目标。结束搜索并回传“找不到目标”。
重复步骤2。
// 基本BFS方法
public void bfsWithLevel(Node start) {
Queue<Node> queue = new LinkedList<>();
Set<Node> visited = new HashSet<>();
int level = 0; // 当前层级
queue.offer(start);
visited.add(start);
while (!queue.isEmpty()) {
int levelSize = queue.size(); // 当前层的节点数
// 遍历当前层的所有节点
for (int i = 0; i < levelSize; i++) {
Node current = queue.poll();
// 处理当前节点
processNode(current, level);
// 遍历邻居
for (Node neighbor : getNeighbors(current)) {
if (!visited.contains(neighbor)) {
visited.add(neighbor);
queue.offer(neighbor);
}
}
}
level++; // 进入下一层
}
}
时间复杂度:最差情形下,BFS必须查找所有到可能节点的所有路径,因此其时间复杂度为O(|V|+|E|)。(|V|表示结点数,|E|表示图中边的数量。
力扣题:
算法学习-3、BFS——广度优先算法(Breadth First Search)
https://www.orioncoder.cn/archives/mAYA92WI