fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。
為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。
給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n×n 的網格,每個格仔 (i,j) 的高度 w(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)。
我們定義乙個格仔的集合 s 為山峰(山谷)當且僅當:
s 的所有格仔都有相同的高度。
s 的所有格仔都連通。
對於 s 屬於 s,與 s 相鄰的 s′ 不屬於 s,都有 ws>ws′(山峰),或者 ws輸入格式
第一行包含乙個正整數 n,表示地圖的大小。
接下來乙個 n×n 的矩陣,表示地圖上每個格仔的高度 w。
輸出格式
共一行,包含兩個整數,表示山峰和山谷的數量。
資料範圍
1 ≤n
≤1000
,1≤n≤1000,
1≤n≤10
00,0≤w
≤109
0≤w≤10^9
0≤w≤10
9輸入樣例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暴搜遍歷一下邊界就可以了。
#include
using
namespace std;
int n,ma[
1005][
1005
],vis[
1005][
1005
],h,l;
queueint,
int>
>q;
void
bfs(
int x,
int y,
int&h,
int&l));
while
(!q.
empty()
)else);
vis[i]
[j]=1;
}}}}
}}intmain()
}for
(int i=
1;i<=n;i++)}
} cout<' '<}
山峰和山谷 Flood Fill
fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n n 的網格,每個格仔 i,j 的高度 w i,j 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如與 i,j 相鄰的格仔有 ...
山峰和山谷 Flood Fill
fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n nn n 的網格,每個格仔 i,j i,j 的高度 w i,j w i,j 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如...
1454 山峰和山谷
時間限制 1000 ms 記憶體限制 65536 kb 提交數 93 通過數 28 給定乙個 n n 的網格狀地圖,每個方格 i,j 有乙個高度 wij 如果兩個方格有公共頂點,則它們是相鄰的。定義山峰和山谷如下 均由地圖上的乙個連通塊組成 所有方格高度都相同 周圍的方格 即不屬於山峰或山谷但與山峰...