基本介绍

广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径。
通过一个示例来说明如何使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径。

image.png
模板

  1. function BFC(root, target){
  2. let queue = [] // 核心数据结构
  3. let used = new Set() // 存放所有访问过的节点
  4. queue.push(root)
  5. used.add(root)
  6. let step = 0 // 记录遍历的层次
  7. // 当这一层的节点列表不为空,就要一直遍历
  8. while(!queue.length){
  9. let size = queue.length
  10. /* 遍历这一层的节点 */
  11. for(let i =0; i < size; i++){
  12. let cur = queue.shift()
  13. /* 划重点:这里判断是否到达终点 */
  14. if(cur === target) return step
  15. // 把每个节点的下一层节点加入到列表
  16. for(Node next : the neighbors of cur){
  17. if(next is not in used){
  18. queue.push(next)
  19. used.add(next)
  20. }
  21. }
  22. }
  23. /* 划重点:更新步数在这里 */
  24. step++;
  25. }
  26. }