1454 山峰和山谷

2021-09-09 06:49:08 字數 1707 閱讀 8270

時間限制: 1000 ms         記憶體限制: 65536 kb

提交數: 93     通過數: 28

給定乙個 n×n

的網格狀地圖,每個方格 (i,j)有乙個高度 wij

​​ 。如果兩個方格有公共頂點,則它們是相鄰的。

定義山峰和山谷如下:

均由地圖上的乙個連通塊組成;

所有方格高度都相同;

周圍的方格(即不屬於山峰或山谷但與山峰或山谷相鄰的格仔)高度均大於山谷的高度,或小於山峰的高度。

求地圖內山峰和山谷的數量。特別地,如果整個地圖方格的高度均相同,則整個地圖既是乙個山谷,也是乙個山峰。

第一行乙個整數n(2≤n≤10002≤n≤10002≤n≤1000)

,表示地圖的大小。

接下來 n

行每行 n 個整數表示地圖。第 i 行有 n 個整數 w

i1,w

i2,…,w

in(0≤w

ij≤1 000 000 000),表示地圖第 i

行格仔的高度。

輸出一行兩個整數,分別表示山峰和山谷的數量。

5

8 8 8 7 7

7 7 8 8 7

7 7 7 7 7

7 8 8 7 8

7 8 8 8 8

2 1
樣例1解釋:

樣例輸入2:

5

5 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
樣例2解釋:

其他同理

資訊學奧賽一本通

分析廣搜的剪枝 ,每個點進行廣搜,每搜完乙個點,把與它相連線的點標記,不重複的搜。

特別注意,如果整個地圖方格的高度均相同,則整個地圖既是乙個山谷,也是乙個山峰。

**:

#include#include#include#include#includeusing namespace std;

const int maxn=1010;

int mp[maxn][maxn];

int dir[2];

int vis[maxn][maxn];

int high,low;

int n;

int cnt;

struct node;

void bfs(int x1,int y1)

else

} }if(sign1&&sign2)

return;

else if(sign1)

high++;

else if(sign2)

low++;

if(cnt==n*n)

low++,high++;

return;

}int main()

} cout<

return 0;

}

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 相鄰的格仔有 ...

山峰和山谷 Flood Fill

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