#include <stdio.h> int main() { int n, m; scanf("%d %d", &n, &m); char pan[n + 2][m + 2]; // 使用 n+2 和 m+2 避免边界检查 // 初始化边界为 '.',防止越界访问 for (int i = 0; i < n + 2; i++) { for (int j = 0; j < m + 2; j++) { pan[i][j] = '.'; } } // 读取输入,注意跳过换行符 for (int a = 1; a <= n; a++) { scanf(" "); // 跳过可能的换行符 for (int b = 1; b <= m; b++) { scanf("%c", &pan[a][b]); } } // 计算每个格子周围的地雷数 for (int a = 1; a <= n; a++) { for (int b = 1; b <= m; b++) { if (pan[a][b] == '*') { continue; // 如果是地雷,跳过 } int shu = 0; // 检查周围的8个方向 if (pan[a][b - 1] == '*') shu++; // ← if (pan[a - 1][b - 1] == '*') shu++; // ↖ if (pan[a - 1][b] == '*') shu++; // ↑ if (pan[a - 1][b + 1] == '*') shu++; // ↗ if (pan[a][b + 1] == '*') shu++; // → if (pan[a + 1][b + 1] == '*') shu++; // ↘ if (pan[a + 1][b] == '*') shu++; // ↓ if (pan[a + 1][b - 1] == '*') shu++; // ↙ pan[a][b] = shu + '0'; // 将数字转换为字符 } } // 输出结果 for (int a = 1; a <= n; a++) { for (int b = 1; b <= m; b++) { printf("%c", pan[a][b]); } printf("\n"); // 每行结束后换行 } return 0; }