暴力枚举题解(带注释,易懂)
2025-07-16 21:28:44
发布于:上海
7阅读
0回复
0点赞
以下为代码
#include<iostream>
using namespace std;
char a[101][101];  // 存储原始地图字符数组
int a1[101][101];   // 存储每个位置周围地雷数量的数组
int main(){
    int n, m;
    cin >> n >> m;  // 输入地图的行数和列数
    // 读取地图数据
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cin >> a[i][j];
        }
    }
    // 统计每个问号位置周围的地雷数量
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(a[i][j] == '*'){  // 如果当前位置是地雷
                // 检查周围8个方向的位置是否是问号,如果是则增加计数
                if(a[i + 1][j] == '?'){
                    a1[i + 1][j]++;
                }
                if(a[i + 1][j + 1] == '?'){
                    a1[i + 1][j + 1]++;
                }
                if(a[i][j + 1] == '?'){
                    a1[i][j + 1]++;
                }
                if(a[i - 1][j + 1] == '?'){
                    a1[i - 1][j + 1]++;
                }
                if(a[i - 1][j] == '?'){
                    a1[i - 1][j]++;
                }
                if(a[i - 1][j - 1] == '?'){
                    a1[i - 1][j - 1]++;
                }
                if(a[i][j - 1] == '?'){
                    a1[i][j - 1]++;
                }
                if(a[i + 1][j - 1] == '?'){
                    a1[i + 1][j - 1]++;
                }
            }
        }
    }
    // 输出结果地图
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(a[i][j] == '*'){  // 如果是地雷直接输出
                cout << '*';
            }else{  // 否则输出周围地雷数量
                cout << a1[i][j]; 
            }
        }
        cout << endl;
    }      
    return 0;
}
全部评论 1
有帮助就点个赞吧
2025-07-10 来自 上海
0






有帮助,赞一个