判断山谷
2026-06-13 14:35:31
发布于:湖北
53阅读
0回复
0点赞
//山谷定义:一个格子的海拔不高于其所有相邻格子(8个方向:上、下、左、右、左上、右上、左下、右下)
//目标:统计网格中山谷的数量
//山谷定义:当前格子海拔 ≤ 所有相邻格子海拔
//8方向检查:使用双重循环遍历(i-1到i+1, j-1到j+1)
//边界处理:跳过越界的格子
//提前终止:一旦发现不是山谷,立即break优化
//下标从1开始:方便边界判断
#include<bits/stdc++.h>
using namespace std;
int a[105][105]; // 存储海拔的二维数组(下标从1开始)
int main(){
int n, m;
cin >> n >> m; // 读入行数n和列数m
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> a[i][j]; // 读入第i行第j列的海拔
}
}
int ans = 0; // 山谷计数器
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
int mi = a[i][j]; // 当前格子的海拔
bool f = 1; // 标记是否为山谷(1=true,0=false)
for(int l = i-1; l <= i+1; l++){
for(int r = j-1; r <= j+1; r++){
if(l==i && r==j) continue; // 跳过自己
if(l<1 || l>n || r<1 || r>m) continue; // 跳过越界
if(a[l][r] < mi){ // 如果相邻格子海拔更低
f = 0; // 当前格子不是山谷
break;
}
}
if(f == 0){
break;
}
}
if(f) ans++; // 如果f仍为1,说明是山谷,计数+1
}
}
cout << ans;
return 0;
}
这里空空如也


有帮助,赞一个