知识点
BFS
什么是BFS
BFS,广度优先搜索,它是一种暴力搜索算法
BFS 的核心思想,就是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,我们写 BFS 算法都是用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。
BFS用来做什么
一般用来寻找最短路径
BFS和DFS之间的区别
BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度比 DFS 大很多
LeetCode算法
LeetCode算法题
111.[二叉树的最小深度]
解题思路:二叉树可以理解为一个图,则该题目就变成了求图的最短路径的题目,因此可以直接使用BFS进行解决。
752.[打开转盘锁]
解题思路:先不考虑deadends的问题,单纯考虑对所有情况穷举。根是"0000",根据规则,则可以进行的策略有8种,并且每个策略又都可以返回到"0000",对剩下的8种策略来说,每个也是如此。因此,所有结果的穷举可以被看成一个8叉树,并且子节点和父节点是双向的。又因为树本身就是一种图的结构,并且问题是求最小的路径,则可以使用BFS。
773.【滑动谜题】
解题思路:滑块问题也是一个图的问题,并且题目要求我们求最少的次数,因此最先考虑是否可以使用BFS来解决。BFS的本质就是穷举,然后找最优解,该题目我们使用BFS则需要穷举出该图的全部局面。如何穷举全部局面?我们可以根据数字0的位置来进行穷举,穷举出所有的局面。