← 返回题目页

A1223 扫雷

标程

#include <bits/stdc++.h>
using namespace std;

// 扫雷(A1223)
//
// 对每个空地统计周围 8 格里的地雷个数;地雷格原样输出 *。
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> m;
    vector<string> a(n), b(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++) b[i] = string(m, '.');

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (a[i][j] == '*') {
                b[i][j] = '*'; // 地雷格原样输出
                continue;
            }
            int cnt = 0;
            for (int dx = -1; dx <= 1; dx++) {
                for (int dy = -1; dy <= 1; dy++) {
                    if (dx == 0 && dy == 0) continue; // 跳过自己
                    int x = i + dx, y = j + dy;
                    if (x < 0 || x >= n || y < 0 || y >= m) continue; // 出界
                    if (a[x][y] == '*') cnt++;
                }
            }
            b[i][j] = char('0' + cnt);
        }
    }

    for (int i = 0; i < n; i++) cout << b[i] << "\n";
    return 0;
}

动画演示