山峰和山谷 Flood Fill

2021-10-10 06:41:04 字數 1863 閱讀 7821

fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。

為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。

給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n×nn×n 的網格,每個格仔 (i,j)(i,j) 的高度 w(i,j)w(i,j) 是給定的。

若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如與 (i,j)(i,j) 相鄰的格仔有(i−1,j−1),(i−1,j),(i−1,j+1),(i,j−1),(i,j+1),(i+1,j−1),(i+1,j),(i+1,j+1)(i−1,j−1),(i−1,j),(i−1,j+1),(i,j−1),(i,j+1),(i+1,j−1),(i+1,j),(i+1,j+1)。

我們定義乙個格仔的集合 ss 為山峰(山谷)當且僅當:

ss 的所有格仔都有相同的高度。

ss 的所有格仔都連通。

對於 ss 屬於 ss,與 ss 相鄰的 s′s′ 不屬於 ss,都有 ws>ws′ws>ws′(山峰),或者 ws輸入格式

第一行包含乙個正整數 nn,表示地圖的大小。

接下來乙個 n×nn×n 的矩陣,表示地圖上每個格仔的高度 ww。

輸出格式

共一行,包含兩個整數,表示山峰和山谷的數量。

資料範圍

1≤n≤10001≤n≤1000,

0≤w≤1090≤w≤109

輸入樣例1:

58 8 8 7 7

7 7 8 8 7

7 7 7 7 7

7 8 8 7 8

7 8 8 8 8

輸出樣例1:

2 1輸入樣例2:

55 7 8 3 1

5 5 7 6 6

6 6 6 2 8

5 7 2 5 8

7 1 0 1 7

輸出樣例2:

3 3

樣例解釋

樣例1:

樣例2:

找到高度一致的連通塊,若該連通塊周圍沒有存在比它高的則該連通塊叫山峰

沒有存在比它矮的則該連通塊叫山谷

#include

#define x first

#define y second

using

namespace std;

typedef pair<

int,

int> pii;

const

int n=

1010

;int m,n;

int g[n]

[n];

bool st[n]

[n];

void

bfs(

int sx,

int sy,

bool

& ishigher,

bool

& islower));

st[sx]

[sy]

=true

;while

(q.size()

)); st[a]

[b]=

true;}

}}}}

intmain()

printf

("%d %d"

,peak,valley)

;return0;

}

Flood Fill 山峰和山谷

fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n n 的網格,每個格仔 i,j 的高度 w i,j 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如與 i,j 相鄰的格仔有 ...

山峰和山谷 Flood Fill

fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n n 的網格,每個格仔 i,j 的高度 w i,j 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如與 i,j 相鄰的格仔有 ...

1454 山峰和山谷

時間限制 1000 ms 記憶體限制 65536 kb 提交數 93 通過數 28 給定乙個 n n 的網格狀地圖,每個方格 i,j 有乙個高度 wij 如果兩個方格有公共頂點,則它們是相鄰的。定義山峰和山谷如下 均由地圖上的乙個連通塊組成 所有方格高度都相同 周圍的方格 即不屬於山峰或山谷但與山峰...