知识点

  1. BFS

    1. 什么是BFS

      BFS,广度优先搜索,它是一种暴力搜索算法

      BFS 的核心思想,就是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,我们写 BFS 算法都是用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。

    2. BFS用来做什么

      一般用来寻找最短路径

    3. BFS和DFS之间的区别

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

LeetCode算法

  1. LeetCode算法题

    1. 111.[二叉树的最小深度]

      解题思路:二叉树可以理解为一个图,则该题目就变成了求图的最短路径的题目,因此可以直接使用BFS进行解决。

    2. 752.[打开转盘锁]

      解题思路:先不考虑deadends的问题,单纯考虑对所有情况穷举。根是"0000",根据规则,则可以进行的策略有8种,并且每个策略又都可以返回到"0000",对剩下的8种策略来说,每个也是如此。因此,所有结果的穷举可以被看成一个8叉树,并且子节点和父节点是双向的。又因为树本身就是一种图的结构,并且问题是求最小的路径,则可以使用BFS。

    3. 773.【滑动谜题】

      解题思路:滑块问题也是一个图的问题,并且题目要求我们求最少的次数,因此最先考虑是否可以使用BFS来解决。BFS的本质就是穷举,然后找最优解,该题目我们使用BFS则需要穷举出该图的全部局面。如何穷举全部局面?我们可以根据数字0的位置来进行穷举,穷举出所有的局面。