算法学习之BFS广度优先搜索(java版)

本文介绍了BFS算法的概念,通过一个打开转盘锁的例题详细阐述了算法的应用,并提供了解决问题的思路。文章强调了队列在算法中的作用,以及如何避免重复访问节点。最后提到了双向BFS作为提高效率的一种方法。
摘要由CSDN通过智能技术生成

算法学习之BFS广度优先搜索(java版)

广度优先搜索就如其名字一样,优先横向搜索,通常用于树和图中。

概念

在这里插入图片描述
图中给出了一棵二叉树,按照广度优先算法输出的结果是:1, 2, 3, 4, 5, 6

可以将广度优先算法抽象成队列的入队与出队的过程。
设队列为queue,并初始化为空

  1. queue=[1],首个节点入队(表示待搜索节点)
  2. queue=[2, 3],队列内头部节点出队(表示已经搜索了该节点),将该节点的左右子节点入队插入到尾部(表示其子节点待搜索)
  3. queue=[3, 4, 5],队列内头部节点2出队,将节点2的两个子节点入队插入到尾部。
  4. queue=[4, 5, 6],队列内头部节点3出队,将节点3的子节点入队插入到尾部。
  5. queue=[5,6],队列内头部节点4出队,已无子节点。
  6. queue=[6],队列内头部节点5出队,已无子节点。
  7. queue=[],队列内头部节点6出队,已无子节点。
  8. 算法结束

注意:数据结构中队列的特性先进先出

框架

class Node {
   
    intval;
    Node left;
    Node right;
}

public static int BFS(Node start, Node target) {
   
    Queue<Node> q = new LinkedList<>(); // 核心数据结构队列

    q.offer(start);
    int step = 1; // 记录步骤

    while (!q.isEmpty()) {
    // 一层走到下一层
        int sz = q.size();
        // 取当前节点,往下走
        for (int i = 0; i < sz; i++)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值