bfs的理解

bfs的小理解

通常来说 bfs是和队列(优先队列)联系在一起的。

解决的问题

如果是队列的话用于求解最小步数,因为bfs的遍历方法为层次遍历,即每一层的步数都相同,因为有判重数组的存在不会重复的进行遍历

如果是优先队列的话用于求最短时间(每一层步数不一定相同)小步数优先。

 求树的直径的时候,需要求俩个最远端点的最小步数,就是求最小步数的最大步数

举个例子模拟一下

bfs的理解

从2开始遍历的1,3,6在第一层,5,4,7在第二层,8在第三层,当每一层步数都相同时,用队列,这时候8既可以写在4下面又可以写在7下面,因为步数相同无所谓的,但如果不相同时,就需要优先队列了,8 是写在4 的下面还是写在7 的下面,取决于4和7(他们在同一层但是他们此时的步数不相同) 这两个状态此时的步数,这就是我所说的小步数优先,假如4 的步数小8就写在4 的下面