题目描述
点击查看原题
思路
- 两个数组,一个存储读入的数据start,一个存储结果res
- 遍历start数组,为1,把res数组中此时所在的点设置为9,将它周围的8个方向的非雷点的res数组的值加1(即周围的雷的数量)
代码
#include<stdio.h>
int start[110][110];
int res[110][110];
int main(){
int n,m;
int i,j,x1,y1,x2,y2;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&start[i][j]);
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(start[i][j]){
res[i][j]=9;
x1=i+1;x2=i-1;
y1=j+1;y2=j-1;
if(x1>0 && x1<=n && !start[x1][j]) res[x1][j]+=1;
if(x2>0 && x2<=n && !start[x2][j]) res[x2][j]+=1;
if(y1>0 && y1<=m && !start[i][y1]) res[i][y1]+=1;/**/
if(y2>0 && y2<=m && !start[i][y2]) res[i][y2]+=1;
if(x1>0 && x1<=n && y1>0 && y1<=m && !start[x1][y1]) res[x1][y1]+=1;
if(x1>0 && x1<=n && y2>0 && y2<=m && !start[x1][y2]) res[x1][y2]+=1;
if(x2>0 && x2<=n && y1>0 && y1<=m && !start[x2][y1]) res[x2][y1]+=1;
if(x2>0 && x2<=n && y2>0 && y2<=m && !start[x2][y2]) res[x2][y2]+=1;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
printf("%d ",res[i][j]);
}
printf("\n");
}
return 0;
}