關於 dfs深度優先搜尋
阿新 • • 發佈:2022-03-20
·dfs是什麼
dfs是一個針對圖和樹的遍歷演算法
·dfs的原理
dfs是由棧的形式實現的,通過棧進行路徑儲存
·dfs的注意事項
1 剪枝 剪枝是為了減少時間成本
2 回溯 回溯回到原來路徑
3 還原 回到原來路徑時,要還原現場
·dfs的思想
假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中 所有和v有路徑相通的頂點都被訪問到。 若此時尚有其他頂點未被訪問到,則另選一個未被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到為止。
·dfs的特點
選定一個出發點後進行遍歷,能前進則前進,若不能前進,回退一步再前進,或再回退一步後繼續前進。依此重複,直到所有與選定點相通的所有頂點都被遍歷。
·顯然,dfs是一個遞迴的過程
//遍歷圖上所有節點 Dfs(V) { if(V是舊節點) return; else { 將V標記為舊點; 對和V相鄰的每個節點U { Dfs(U); } } } int main() { 將所有點標記為新點; while(在圖中能找到新點k) Dfs(k); } //在圖上尋找路徑 bool Dfs(V) { if(V為終點) return true; if(V為舊點)return false; 將V標記為舊點; 對和V相鄰的每個節點U { if(Dfs(U)==true) return true; } return false; }