暴力枚举题解(带注释,易懂)
2025-07-16 21:28:44
发布于:上海
6阅读
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
有帮助,赞一个