题目描述
扫雷游戏是一款十分经典的单机小游戏。在 n 行
m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出 n 行 m 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
写代码时遇到的最大的问题:数组越界时的处理方法
#include <stdio.h>
int main()
{
int n,m;
scanf("%d %d",&n,&m);
char p[n][m];
int i,j;
for(i=0;i<n;i++){
getchar();
for(j=0;j<m;j++){
scanf("%c",&p[i][j]);
}
}
int cnt=0;
int l=0,k=0;
for(i=0;i<n;i++){
cnt=0;
for(j=0;j<m;j++){
if(p[i][j]=='*'){
printf("%c",p[i][j]);
}else{
for(l=i-1;l<=i+1;l++){
for(k=j-1;k<=j+1;k++){
if(l>=0&&k>=0&&l<n&&k<m){
if(p[l][k]=='*'){
cnt++;
}
}
}
}
printf("%d",cnt);
cnt=0;
}
}
if(i!=n-1){
printf("\n");
}
}
return 0;
}