基础算法 --- BFS(广度优先搜索/宽度优先搜索)

Posted sniffs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础算法 --- 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思想,然后勤加练习吧。

以上是关于基础算法 --- BFS(广度优先搜索/宽度优先搜索)的主要内容,如果未能解决你的问题,请参考以下文章

常见搜索算法:深度优先和广度优先搜索

BFS(广度优先搜索)

算法与数据结构基础 - 广度优先搜索(BFS)

算法 | 广度优先遍历BFS

常用的图算法:广度优先(BFS)

广度优先搜索算法(go)