旨在为小朋友们提供全面的学习材料,共同为等级考试做好准备。
添加小助手微信,回复【GESP四级2026.03_山之谷】,获取本题源代码。
【提交】
https://www.luogu.com.cn/problem/B4501
【问题描述】
现有一片山地,可以视为一个 行 列的网格图,第 行 列的海拔为 。
若一个单元格的海拔不高于其所有相邻(包括边相邻和顶点相邻,每个单元格至多有 8 个相邻的单元格)单元格的海拔,则称其为山谷。
请你数一数该片山地中有多少山谷。
【输入描述】
第一行包含 个整数 ,表示山地的大小。
之后 行,每行包含 个整数 ,表示海拔。
【输出描述】
输出 1 行,包含 1 个整数 ,表示山谷的数量。
【样例输入1】
3 57 6 7 7 96 5 6 7 66 5 7 8 9【样例输出1】
3【样例解释】
样例 1 如图所示,绿色单元格代表山谷:

【数据范围】
保证 ,。
参考程序:
''' [GESP202603 四级] 山之谷 https://www.luogu.com.cn/problem/B4501'''n, m = tuple(map(int, input().split()))lst = []for _ in range(n): d = list(map(int, input().split())) lst.append(d)dx = [-1, -1, -1, 0, 0, +1, +1, +1]dy = [-1, 0, +1, -1, +1, -1, 0, +1]cnt = 0for i in range(n):for j in range(m): flag = Truefor k in range(8): x, y = i + dx[k], j + dy[k]if x < 0or x > n - 1or y < 0or y > m - 1:continueif lst[i][j] > lst[x][y]: flag = Falsebreakif flag isTrue: cnt += 1print(cnt)青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
