時間限制: 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 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如...