简略题解
2025-10-31 21:43:31
发布于:广东
3阅读
0回复
0点赞
讲解
代码功能
计算扫雷游戏中每个非地雷格周围的地雷数量。
变量说明
int a,b;
char arr[a+2][b+2]; // 存储雷区地图,'*'表示地雷,其他字符表示空地
int count[a+2][b+2]; // 存储每个格子周围的地雷数量
算法流程
- 读取输入
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
cin>>arr[i][j];
}
}
读取a行b列的雷区地图。
- 计算地雷数量
if(arr[i][j]=='*'){ // 如果当前格子是地雷
for(int dx=-1;dx<=1;dx++){ // 遍历x方向:左、中、右
for(int dy=-1;dy<=1;dy++){ // 遍历y方向:上、中、下
if(dx==0&&dy==0)continue; // 跳过自己
int ni=i+dx,nj=j+dy; // 计算相邻格子坐标
if(ni>=1&&ni<=a&&nj>=1&&nj<=b){ // 检查边界
count[ni][nj]++; // 相邻格子的地雷数+1
}
}
}
}
逻辑:当地雷格被发现时,它会让周围8个相邻格子的计数都增加1。
- 输出结果
if(arr[i][j]=='*'){
cout<<'*'; // 地雷格直接输出*
}else{
cout<<count[i][j]; // 非地雷格输出周围地雷数
}
上代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
char arr[a+2][b+2];
int count[a+2][b+2]={0};
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
cin>>arr[i][j];
}
}
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(arr[i][j]=='*'){
for(int dx=-1;dx<=1;dx++){
for(int dy=-1;dy<=1;dy++){
if(dx==0&&dy==0)continue;
int ni=i+dx,nj=j+dy;
if(ni>=1&&ni<=a&&nj>=1&&nj<=b){
count[ni][nj]++;
}
}
}
}
}
}
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(arr[i][j]=='*'){
cout<<'*';
}else{
cout<<count[i][j];
}
}
cout<<endl;
}
return 0;
}
结束
给个赞吧
这里空空如也


有帮助,赞一个