1. 程式人生 > 實用技巧 >BFS 演算法框架,見到 BFS 直接套

BFS 演算法框架,見到 BFS 直接套

寫在前面:本框架引自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需要棧的幫助。