当前位置:首页>python>【GESP】2026年06月Python四级 -- 扫雷

【GESP】2026年06月Python四级 -- 扫雷

  • 2026-09-05 11:01:31
【GESP】2026年06月Python四级 -- 扫雷

跟老马一起“升级打怪”学编程!

旨在为小朋友们提供全面的学习材料,共同为等级考试做好准备。

添加小助手微信,回复【GESP四级2026.06_扫雷】,获取本题源代码。

GESP四级2026.06_扫雷

【提交】

https://www.luogu.com.cn/problem/B4557

【问题描述】

小杨同学正在游玩经典游戏「扫雷」,他想自己生成一个「扫雷」的地图。

小杨同学希望生成的地图大小为  行  列,一共  个区块。

区块行号为 ,列号为 。 其中一些区块为雷区,其它区块不为雷区。

小杨同学指定了  个区块为雷区,而其它区块均不为雷区。小杨同学希望你帮忙计算非雷区的区块,每个区块与多少个雷区相邻?

我们定义区块相邻,当且仅当两个区块至少有一个公共顶点(也就是说对于不在地图边缘的区块,周围  个区块均与其相邻)。

【输入描述】

输入包含  行。第一行,三个正整数 , 和 ,分别表示地图行数和列数,以及雷区数量。接下来的  行,每行有  个整数,分别表示第  个雷区的行号和列号。

保证输入的雷区不重复。

【输出描述】

输出  行,每行  个 字符(使用空格分割),对于第  行第  列,输出地图对应区块的信息:

  1. 如果为雷区,输出 *;
  2. 如果不是雷区,输出其相邻雷区数量(输出  到  中的一个数字)。

【样例输入1】

3 4 41 11 32 43 2

【样例输出1】

* 2 * 22 3 3 *1 * 2 1

【样例解释1】

根据输入,在  的地图上有  个雷区,分别是 ,, 和 ,如输出样例中 * 所示,其它非雷区区块的相邻雷区数量可以直观看出。

【数据范围】

。

输入的雷区必定在地图内且不重复,注意行号和列号均从  开始。

参考程序:

'''[GESP202606 四级] 扫雷https://www.luogu.com.cn/problem/B4557'''n, m, q = map(int, input().split())# 初始化:雷标记矩阵 + 计数矩阵(多一圈避免边界判断)lst = [[0for _ in range(m + 2)] for _ in range(n + 2)]for _ in range(q):    i, j = map(int, input().split())    lst[i][j] = '*'dx = [-1, -1, -1, +0, +0, +1, +1, +1]dy = [-1, +0, +1, -1, +1, -1, +0, +1]for i in range(1, n + 1):for j in range(1, m + 1):if lst[i][j] != "*":            cnt = 0for k in range(8):                x = i + dx[k]                y = j + dy[k]if lst[x][y] == "*":                    cnt += 1            lst[i][j] = cntfor i in range(1, n + 1):for j in range(1, m + 1):        print(lst[i][j], end=" ")    print()

青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的 #21天刷题打卡、 #GESP编程能力测评、 #青少年编程等级考试、 #教育部白名单比赛辅导 以及 #青少年编程组队竞赛 等活动。

最新文章

随机文章