#include <iostream>
using namespace std;
#include<vector>
int main() {
int n,m;
cin >> n >> m;
vector<vector<char>> sweeping(n+2,vector<char>(m+2));
//输入初始雷布局
for(int i =1;i<n+1;++i){
for(int j =1;j<m+1;++j){
cin >> sweeping[i][j];
}
}
//存放数字的
int count = 0;
for(int i =1;i<n+1;++i){
for(int j =1;j<m+1;++j){
if(sweeping[i][j] =='.'){
//判断是不是边界的 第一行/列 最后一行/列
//如果增加一行列就可以不判断边界
count=0;
for(int a =i-1;a<=i+1;++a){
for(int b=j-1;b<=j+1;++b){
if(sweeping[a][b] =='*'){
count++;
}
}
}
//"."替换成数字
sweeping[i][j] =count+'0';
}
}
}
//打印最终结果
for(int i =1;i<n+1;++i){
for(int j =1;j<m+1;++j){
cout << sweeping[i][j];
}
cout <<endl;
}
}
提供一个新的思路 比较简单 思路在注释

京公网安备 11010502036488号