必學演算法 深度優先搜尋(DFS

2021-10-08 10:58:57 字數 1382 閱讀 2883

深度優先搜尋給定整數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 ...