深度優先搜尋(DFS)例題

2021-09-11 07:21:45 字數 1105 閱讀 3550

dfs概念

它從某個狀態開始,不斷地轉移狀態直至無法轉移,然後回退到前一步的狀態,繼續轉移其他狀態,如此不斷重複,直至找到最終的解。

解題利用的是 遞迴函式。

例題

/*

dfs 例題

*///給定整數a1,a2,a3...an,判斷是否能夠從中抽出幾個整數使得它們的和剛好為k

int a[max]

;int n, k;

bool

dfs(

int i,

int sum)

;int

main()

cin >> k;if(

dfs(0,

0)) cout <<

"yes\n"

;else cout <<

"no\n";}

bool

dfs(

int i,

int sum)

/*

計算水窪 dfs 例題

有乙個大小為n * m的園子,雨後積起了水,八連通的水窪是認為連線在一起的,請你求出園子裡的水窪

(八連通裡的水相當於圖中相對於『w』的『*』)

* * *

* w *

* * *

*/#define n_max 101

#define m_max 101

#include

using

namespace std;

int n, m;

char filed[n_max]

[m_max]

;//園子

void

dfs(

int x,

int y)

;int

main()

}//計算水窪

for(

int i =

0; i < n;

++i)}}

cout << count << endl;

}void

dfs(

int x,

int y)

}//沒有就退出

return

;}

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

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

深度優先搜尋例題

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