迷途之旅 - 原创
type: channel
link: https://blog.jitsu.top/tag/%E5%8E%9F%E5%88%9B/
items: 记一道简单的Python题——简单扫雷

记一道简单的Python题——简单扫雷
type: item
date: 2022-10-31T18:34:00+08:00
description: Q:扫雷游戏地雷数计算总时间限制: 1000ms 内存限制: 65536kB描述扫雷游戏是一款十分经典的单机小游戏。它的精髓在于，通过已翻开格子所提示的周围格地雷数，来判断未翻开格子里是否是地雷。现在给出n行m列的雷区中的地雷分布，要求计算出每个非地雷格的周围格地雷数。注：每个格子周围格有八个：上、下、左、右、左上、右上、左下、右下。输入第一行包含两个整数n和m，分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。接下来n行，每行m个字符，‘*’表示相应格子中是地雷，‘？’表示相应格子中无地雷。字符之间无任何分隔符。输出n行，每行m个字符，描述整个雷区。若相应格中是地雷，则用‘*’表示，否则用相应的周围格地雷数表示。字符之间无任何分隔符。样例输入3 3 *?? ??? ?*?样例输出*10 221 1*1解答（我是傻逼）a, b = map(int, input().split()) ls = [] def up(ls, row, col): if type(ls[row][col]) == int: ls[row][col] += 1 for i in range(a): ls1 = list(input()) ls1 = [0 if i == '?' else i for i in ls1] ls1.append(0) ls1.insert(0, 0) ls.append(ls1) ls.append([0 for i in range(b + 2)]) ls.insert(0, [0 for i in range(b + 2)]) for i in range(1, a + 1): for j in range(1, b + 1): if ls[i][j] == '*': up(ls, i - 1, j - 1) up(ls, i - 1, j) up(ls, i - 1, j + 1) up(ls, i, j - 1) up(ls, i, j + 1) up(ls, i + 1, j - 1) up(ls, i + 1, j) up(ls, i + 1, j + 1) for i in range(1, a + 1): for j in range(1, b + 1): print(ls[i][j], end='') if i != a: print()