算法学习-3、BFS——广度优先算法(Breadth First Search)
7

定义:广度优先搜索算法(英语:Breadth-first search,缩写:BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。广度优先搜索的实现一般采用open-closed表。

实现方法

  1. 首先将根节点放入队列中。

  2. 从队列中取出第一个节点,并检验它是否为目标。

    • 如果找到目标,则结束搜索并回传结果。

    • 否则将它所有尚未检验过的直接子节点加入队列中。

  3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜索的目标。结束搜索并回传“找不到目标”。

  4. 重复步骤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|表示图中边的数量。

力扣题:

1091. 二进制矩阵中的最短路径

算法学习-3、BFS——广度优先算法(Breadth First Search)
https://www.orioncoder.cn/archives/mAYA92WI
作者
Orion
发布于
更新于
许可