當初剛學搜索的時候,搜索是把我搞得一臉懵,知道原理,敲不出代碼,後來看大神的題解,寫了幾道題才搞懂深度優先搜索。算法
搜索!很暴力!框架
搜索算法是利用計算機的高性能來有目的的窮舉一個問題解空間的部分或全部的可能狀況,從而求出問題的解的一種方法。在競賽中,搜索法還被當作「救命稻草」——大多數問題均可以使用搜索來謀取部分分數。性能
深度優先搜索屬於其中一種,英文縮寫爲DFS即Depth First Search。深度優先搜索就是一條路走到黑,不撞南牆不回頭的一種遍歷方法,確實暴力!spa
算法思路code
如上圖所示,這是一個無向圖,咱們就從A開始搜索。從A出發,先找到了鄰節點C(我用的是從左到右的順序),而後繼續搜索,找到了鄰節點B,而後咱們發現,B除了C之外沒有鄰節點了,咱們就回到C點,這一步叫回溯,以後繼續遍歷到點D,發現D的鄰節點A已經被遍歷過了,因此回溯到C,這個時候,咱們發現C的全部鄰節點都被遍歷過了,因此咱們繼續回溯,回到了A點,開始遍歷F這一邊。以此類推,咱們就把整個圖遍歷完了,遍歷的順序是A—>C—>B—>D—>F—>G—>E。blog
真的是好暴力厲害呀!!!io
框架class
這裏給出一個深度優先搜索的框架原理
1 void DFS(當前狀態){ 2 if (當前狀態爲邊界){ 3 if (當前狀態爲最佳目標狀態) 記下最優結果; 4 return;//回溯 5 } 6 for (int i =算符最小值; i<= 算符最大值; i++){ //算符i做用於當前狀態,擴展出一個子狀態; 7 if ((子狀態知足約束條件)&&子狀態知足最優性要求)) DFS(子狀態) 8 } 9 }