算法模板

  1. // 计算从起点 start 到终点 target 的最近距离
  2. function BFS(start, target) {
  3. let q: Queue = []; // 核心数据结构
  4. let visited = new Set(); // 避免走回头路
  5. q.add(start); // 将起点加入队列
  6. visited.add(start);
  7. let step = 0; // 记录扩散的步数
  8. while (q ) {
  9. int sz = q.length;
  10. /* 将当前队列中的所有节点向四周扩散 */
  11. for (let i = 0; i < sz; i++) {
  12. let cur = q.pop();
  13. /* 划重点:这里判断是否到达终点 */
  14. if (cur is target)
  15. return step;
  16. /* 将 cur 的相邻节点加入队列 */
  17. for ( let x of cur.adj())
  18. if (x not in visited) {
  19. q.offer(x);
  20. visited.add(x);
  21. }
  22. }
  23. /* 划重点:更新步数在这里 */
  24. step++;
  25. }
  26. }

练习