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