BFS解题框架

BFS(Breath First Search,广度优先算法)和DFS(Depth First Search,深度优先算法)是非常常用的两种算法,其中DFS通常被认为是“回溯算法”。

BFS相对DFS的最大区别是:BFS找到的路径一定是最短的,但代价是空间复杂度比DFS大很多

BFS的核心思想:把一个问题抽象成,从一个点开始,向四周扩散。通常BFS算法都是需要“队列”这种数据结构,把一个点周围的点加入这个队列。

算法框架

int BFS(Node start, Node end) {
    Queue<Node> queue = new LinkedList<>();	// 核心数据结构
    Set<Node> visited = new HashSet<>();	// 避免走回头路

    queue.offer(start);
    visited.add(start);
    int step = 0;
    
    while (!queue.isEmpty()) {
        int size = queue.size();
        // 将当前队列中的所有点向周围扩散
        for (int i = 0; i < size; i++) {
            Node node = queue.poll();
            // 判断是否到达终点
            if (node == end) {
                return step;
            }
            // 将当前点周围的点都加入队列
            for (Node newNode : node.adj()) {
                if (!visited.contains(newNode)) {
                    queue.offer(newNode);
                    visited.add(newNode);
                }
            }
        }
        step++;
    }
    return step;
}

练习题目:

  1. Leetcode 111. 二叉树的最小深度
  2. Leetcode 752. 打开转盘锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值