DFS深度優先搜尋(附例題)

2022-07-13 03:57:09 字數 851 閱讀 5275

深度優先搜尋,簡稱dfs,算是應用最廣泛的搜尋演算法,屬於圖演算法的一種,dfs按照深度優先的方式搜尋,通俗說就是「一條路走到黑」,dfs是一種窮舉,實質是將所有的可行方案列舉出來,不斷去試探,知道找到問題的解,其過程是對每乙個可能的分支路徑深入到不能再深入為止,且每個頂點只能訪問一次。

dfs一般借助遞迴來實現

例題:走迷宮

#include #include 

using

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 也就是去除沒有用...