题目描述
现有一片山地,可以视为一个n行m列的网格图,第n行m列的海拔为hi, hj。
如果一个单元格的海拔不高于其所有相邻单元格(相邻包括上、下、左、右、左上、右上、左下、右下,最多8个方向)的海拔,则称该单元格为山谷。
请你数一数该片山地中有多少山谷。
输入格式
第一行包含2个整数n,m表示山地的大小。
之后n行,每行包含m个整数(hi, h1), (hi, h2)...(hi, hm),表示海拔。
输出格式
输出1行,包含1个整数c,表示山谷的数量。

思路:

1.可以用方向数组来表示每个海拔的8个方向

2.可以用二维数组表示这片山地

3.判断时要注意只判断范围内的海拔

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
	LL n, m, cnt = 0;
	cin >> n >> m;
	vector<vector<LL>> arry(n, vector<LL> (m));
	for (LL i = 0; i < n; i++) {
		for (LL j = 0; j < m; j++) {
			cin >> arry[i][j];
		}
	}
	LL dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
	LL dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
	for (LL i = 0; i < n; i++) {
		for (LL j = 0; j < m; j++) {
			bool flag = true;
			for (LL k = 0; k < 8; k++) {
				LL ni = i + dx[k];
				LL nj = j + dy[k];
				if (ni >= 0 && ni < n && nj >= 0 && nj < m) {
					if (arry[ni][nj] < arry[i][j]) {
						flag = false;
						break;
					}
				}
			}
			if (flag) {
				cnt++;
			}
		}
	}
	cout << cnt << endl;
	return 0;
}

步骤:

1.定义方向数组和二维数组并完成输入

2.遍历二维数组并用方向数组进行判断

3.完成计数和输出

注意:

逻辑判断不要写错

不要越界访问

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐