深度优先搜索重要模板
生活随笔
收集整理的這篇文章主要介紹了
深度优先搜索重要模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
深度優先搜索(Depth-First-Search)
從起點出發,走過的點要做標記,發現有沒走過的點,就隨意挑一個往前走,走不 了就回退,此種路徑搜索策略就稱為“深度優先搜索”,簡稱“深搜”。
其實稱為“遠度優先搜索”更容易理解些。因為這種策略能往前走一步就往前走一 步,總是試圖走得更遠。所謂遠近(或深度),就是以距離起點的步數來衡量的。
中國大學mooc 郭煒老師的算法上講的幾個模板(偽代碼)
我寫了一下注釋,便于理解
1.判斷從V出發是否能走到終點
int main() {將所有點標記為新點起點 = 1;終點 = 8;cout<<Dfs(起點); }bool Dfs(V){if(V為終點)return true;if(V為舊點)return false;將V標記為舊點對和V相鄰的每個節點U{//往往要寫多個if,將每個相鄰節點都考慮到if(Dfs(U)==true)return true; }return fasle; }2.判斷從V出發是否能走到終點,如果能,要記錄路徑:
Node path[MAX_LEN];//MAX_LEN取節點總數即可 //path,記錄路徑。node,可以是int(節點標號),也可以是結構題類型 int depth;//深度int main() {將所有點標記為新點;//一般memset全變成0表示新點,1表示舊點depth = 0;if(Dfs(起點)){for(int i=0;i<=depth;++i)//輸出經過的每個點的路徑cout<<path[i]<<endl;} }bool Dfs(V){if(V為終點)path[depth]=V;return true; }if(V為舊點)return false;將V標記為舊點;path[depth]=V;++depth;對和V相鄰的每個節點U{if(Dfs(U)==true) //如果返回true,那么說明,從v開始能走到終點 }--depth;//現在v是放到path里的,但是返回false,說明從v出發走不到終點,//v不應出現在路徑里,所以深度減一。return false; }3.深度優先遍歷圖上所有節點
Dfs (V) { if( V是舊點 )return; //如果v已經走過,那馬上返回將V標記為舊點 ;對和 V相鄰的每個點 U { Dfs (U);//包含他的父節點和子節點都要涉及到//常用if判斷條件是否滿足,然后dfs} } int main() {將所有點 都標記為新;while( 在圖中能找到新點 k)Dfs (k);//這樣避免了有多個連通圖的情況 }總結
以上是生活随笔為你收集整理的深度优先搜索重要模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python o创建文件_Python
- 下一篇: amd cpu排行_最新AMD CPU排