zoukankan      html  css  js  c++  java
  • 基础算法 --- BFS(广度优先搜索/宽度优先搜索)

    个人理解

    BFS是一种最简便的图搜索算法,通过遍历整张图直到找到目标节点;

    从算法的角度看,所有因为展开节点而得到的字节点会被存储到一个FIFO的数据结构中,被遍历过的节点存储在一个容器中(一般是一个set),防止重复搜索

    图解

     如图所示,我们想要获取从S到E节点的最短路径,运用BFS,如何处理??

    主要思想是:从节点S开始将其所有临近子节点存放到一个队列中,然后标记这些节点到最初顶点S的距离为1;

                          然后根据队列的先进先出特定,出队列,判断是否为目标节点;如果不是,将出队节点的临近子节点入队,直到队列为空

    伪代码

    int BFS(Node root, Node target) {

      Queue<Node> queue;

      Set<Node> set; // 用来存储访问过的节点

      queue.add(root);

      set.add(root);

      int instance = 0; // 标识根节点到目标节点的距离

           while(queue is not empty) {

        instance++;

        int queueSize;

                  for (index = 0; index < queueSize; index++) {

          node = queue.remove(); // 取队列根节点

             if (node is target node) {

            return instance;

          }

          add node next nodes in queue; // 将节点的所有临近子节点入队列

        }

      }

      return -1;

    }

    力扣对应习题

    https://leetcode-cn.com/problems/open-the-lock/

    https://leetcode-cn.com/problems/perfect-squares/

    个人观点 --- 不喜勿喷,欢迎指正,共同学习共同进步

    此类算法题的难点在于如何将给定的题目拆解,并应用到BFS中;没有什么捷径,需要深刻理解BFS思想,然后勤加练习吧。

  • 相关阅读:
    《POJ-2369》
    《1402
    《2018 Multi-University Training Contest 8》
    《HDU
    循环串
    模拟赛 数根 题解
    备份
    关于带删除线性基
    论OIer谈恋爱的必要性
    某计数题题解
  • 原文地址:https://www.cnblogs.com/sniffs/p/12042046.html
Copyright © 2011-2022 走看看