DFS和BFS的總結

2021-10-10 00:14:27 字數 888 閱讀 5573

如果我們使用 dfs/bfs 只是為了遍歷一棵樹、一張圖上的所有結點的話,那麼 dfs 和 bfs 的能力沒什麼差別,我們當然更傾向於更方便寫、空間複雜度更低的 dfs 遍歷。不過,某些使用場景是 dfs 做不到的,只能使用 bfs 遍歷。這就是本文要介紹的兩個場景:「層序遍歷」、「最短路徑」。還有寫 dfs/bfs的演算法模版。

遞迴模版:

void dfs(treenode root)

dfs(root.left);

dfs(root.right);

}

非遞迴模版:

void stackdfs(treenode root)

while(!stk.empty())

}

void bfs(treenode root)

while(!queue.isempty())

if(node.right != null)

}}

void bfs(treenode root)

while(!queue.isempty())

if(node.right != null)} }

}

題目:給定乙個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。兩個相鄰元素間的距離為 1 。

class solution );

}else}}

// 方向座標

int dx = new int ;

int dy = new int ;

while(!queue.isempty()));}}

}return matrix;

}}

dfs和bfs的總結

dfs dfs演算法是乙個對連通圖進行遍歷的演算法。它的思想是從乙個被選定的點出發一條路走到底,如果得不到目的解,那就返回到上乙個節點,然後換一條路繼續走到底,直到找到目的解返回或者全部遍歷完返回乙個事先定好的值。dfs一般借用遞迴完成整個演算法的構造。dfs演算法的一般框架經我總結大致為下 int...

DFS和BFS學習總結

深度遍歷就是在圖中從乙個頂點開始,按照乙個規則不重複地走下去。就是不撞南牆不回頭一樣。假如從a頂點開始,按照乙個規則去走 假如我們按照一直字典順序走 那麼就從a走到b再從b走到了c,走到c後再按照字典順序的時候,發現a已經走過,那麼此時就退回到c點,選擇另乙個d走下去。就和樹的前序遍歷是一樣的。1 ...

BFS和DFS演算法學習總結

bfs 這是一種基於佇列這種資料結構的搜尋方式,它的特點是由每乙個狀態可以擴充套件出許多狀態,然後再以此擴充套件,直到找到目標狀態或者佇列中頭尾指標相遇,即佇列中所有狀態都已處理完畢。廣度優先搜尋 bfs 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。...