深度優先搜尋給定整數a1…an,判斷能否從中選擇出若干個數祖成k
深度優先搜尋(dfs)**
#include
using
namespace std;
int n,k;
int a[21]
;//已經從前i項得到了和sum,然後對於i之後的進行分支
深度優先搜尋從最開始的狀態出發,遍歷所有可以到達的狀態。由此可以對所有的狀態進行操作, 或者列舉出所有的狀態。****
有乙個大小為mn的園子,雨後積起了水。八連通的積水被認為是連線在一起的。
請求出園子裡共有多少水窪?(**八連通指的是下面圖中相對w的的部分**)w
限制條件:
n,m≤100
輸入第一行包含兩個正整數 n 和 m,表示將乙個園子地面分成n*m塊方格,n 行,m列,
接下來的 n 行描述了園子地面狀況,其中『w』表示積水的水窪,『.』表示沒有積水。
輸出僅乙個數,表示水窪的總數。
輸入示例
10 12
w…ww.
.www…www
…ww…ww.
…ww.
…w……w…w…
.w.w…ww.
w.w.w…w.
.w.w…w.
…w…w.
輸出示例
3前面說的情況明確指出是相對的情況,所以並不是說水窪一定要和最開始舉例那個一模一樣,形式結構上一樣也可以算是水窪,接下來我們用dfs即可,從任意的w開始, 不停地把鄰接的部分用 ' .'代替。 1次dfs後與初始的這個w連線的所有w就都被替換成了 』 . ', 因此直到圖中不再存在w為止, 總共進行dfs的次數就是答案了。 8個方向共對應了8種狀態轉移, 每個格仔作為dfs的引數至多被呼叫一次, 所以複雜度為0(8xnxm)=o(nx m)。*/
#include
using
namespace std;
int n,m;
char field[
100]
[100];
void
dfs(
int x,
int y)
}int
main()
cout<
return0;
}
結語 深度優先搜尋演算法(DFS)
1.深度優先搜尋屬於圖的遍歷演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。2.搜尋策略 深度優先遍歷圖的方法是,從圖中某頂點v出發 1 訪問頂點v 2 依次從v的未被訪問的鄰接點出發,對圖進...
深度優先搜尋 DFS 演算法摘記
圖的表示 對於圖g v,e 可以用兩種標準表示方法表示。一種表示法是將圖作為鄰接鍊錶的組合,另一種是將圖作為鄰接矩陣來看待。鄰接鍊錶 鄰接鍊錶表示由乙個包含 v 條鍊錶的陣列adj所構成,每個結點有一條鍊錶。對於每個結點u,鄰接鍊錶adj u 包含所有與結點u之間有邊相連的結點v。鄰接鍊錶在表示稀疏...
DFS深度優先搜尋演算法
例題一 題目大意 約翰的農場被暴風雨給淹沒了,損失很大,他的保險公司將支付給他,但是支付金額取決於被淹沒的最大面積。這個農場是乙個邊長分別為n m的矩形,包含nm個空間,每個空間要麼是幹的,要麼是被淹沒的,一共有k個空間被淹沒。求最大的淹沒面積。ac include include include ...