深度優先搜尋,簡稱dfs,算是應用最廣泛的搜尋演算法,屬於圖演算法的一種,dfs按照深度優先的方式搜尋,通俗說就是「一條路走到黑」,dfs是一種窮舉,實質是將所有的可行方案列舉出來,不斷去試探,知道找到問題的解,其過程是對每乙個可能的分支路徑深入到不能再深入為止,且每個頂點只能訪問一次。
dfs一般借助遞迴來實現
例題:走迷宮
#include #includeusing
namespace
std;
intm,n;
intsx,sy,ex,ey;//起點終點座標
int mp[20][20
];//記錄地圖
int cnt=0
;//結果個數
int ax[10]=;//x的四個走向
int ay[10]=;//y的四個走向
int vis[20][20
];//記錄是否來過
int dfs(int x,int
y) vis[x][y]=1
;//將x,y設為已經來過
if(vis[x][y]==1
) }
vis[x][y]=0
;
return0;
}}int
main()
else
if(c=='s'
)else
if(c=='t'
)else
mp[i][j]=1
;//'#'為牆壁,走不通所以設為1}}
dfs(sx,sy);//從起點開始遍歷
cout
return0;
}
深度優先搜尋(DFS)例題
dfs概念 它從某個狀態開始,不斷地轉移狀態直至無法轉移,然後回退到前一步的狀態,繼續轉移其他狀態,如此不斷重複,直至找到最終的解。解題利用的是 遞迴函式。例題 dfs 例題 給定整數a1,a2,a3.an,判斷是否能夠從中抽出幾個整數使得它們的和剛好為k int a max int n,k boo...
深度優先搜尋例題
輸入m行,n列的陣列,給定起點座標x,y和終點座標w,z,求從起點到終點的路徑數。規定可以前後左右移動,但是下一步的值必須比當前值大。示例 輸入 4 5 0 0 1 0 0 0 0 2 0 0 0 0 3 4 0 0 0 7 5 0 0 2 3 2 輸出 2 解法 其實就是很簡單的深度優先搜尋 in...
深度優先搜尋DFS
作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...