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

个人理解

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

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

图解

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

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

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

伪代码

int BFS(Node root, Node target) {

扫描二维码关注公众号,回复: 8194547 查看本文章

  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思想,然后勤加练习吧。

猜你喜欢

转载自www.cnblogs.com/sniffs/p/12042046.html