A20827. 山之谷
填空题
较难
知识点
题目描述
山之谷
题目描述
现有一片山地,可以视为一个N行M列的网格图,第i行j列的海拔为hi,j。
如果一个单元格的海拔不高于其所有相邻单元格(相邻包括上、下、左、右、左上、右上、左下、右下,最多8个方向)的海拔,则称该单元格为山谷。
请你数一数该片山地中有多少山谷。
输入格式
第一行包含2个整数N,M,表示山地的大小。
之后N行,每行包含M个整数hi,1,hi,2,...,hi,M,表示海拔。
输出格式
输出1行,包含1个整数C,表示山谷的数量。
样例
输入样例
3 5
7 6 6 7 9
6 5 6 7 6
6 5 7 8 9输出样例
3样例解释
样例 1 如图所示,绿色单元格代表山谷:

数据范围
保证1≤N,M≤100,1≤hi,j≤105。
参考答案
#include <iostream>
using namespace std;
int main() {
int n, m;
int h[105][105];
cin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> h[i][j];
for(int i = 0; i <= max(n, m) + 1; i++)
h[i][0] = h[0][i] = h[i][m + 1] = h[n + 1][i] = 1e9;
int ans = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
bool ok = true;
for(int i2 = i - 1; i2 <= i + 1; i2++)
for(int j2 = j - 1; j2 <= j + 1; j2++)
if(h[i][j] > h[i2][j2]) {
ok = false;
break;
}
ans += ok;
}
}
cout << ans;
return 0;
}
上一题
下一题