BFS 演算法框架,見到 BFS 直接套
阿新 • • 發佈:2020-08-01
寫在前面:本框架引自LeetCode上的labuladong大佬,這是他的主頁:https://leetcode-cn.com/u/labuladong/
// 計算從起點 start 到終點 target 的最近距離 int BFS(Node start, Node target) { Queue<Node> q; // 核心資料結構 Set<Node> visited; // 避免走回頭路 q.offer(start); // 將起點加入佇列 visited.add(start); int step = 0; // 記錄擴散的步數 while(q not empty) { int sz = q.size(); /* 將當前佇列中的所有節點向四周擴散 */ for (int i = 0; i < sz; i++) { Node cur = q.poll(); /* 劃重點:這裡判斷是否到達終點 */ if (cur is target) return step; /* 將 cur 的相鄰節點加入佇列 */ for (Node x : cur.adj())if (x not in visited) { q.offer(x); visited.add(x); } } /* 劃重點:更新步數在這裡 */ step++; } } 作者:labuladong 連結:https://leetcode-cn.com/problems/open-the-lock/solution/wo-xie-liao-yi-tao-bfs-suan-fa-kuang-jia-jian-dao-/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
BFS需要佇列的幫助,DFS需要棧的幫助。