小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵,他希望你帮他生成一个扫雷矩阵。
扫雷矩阵的每一行每一列都是一个数字,每个数字的含义是与当前位置相邻的8个方向中,有多少个雷(在下图中,雷用*表示);如果当前位置就是雷的话,仍输出一个*。
比如初始的雷矩阵如下:
....
..**
*.*.
.*.*
对应的数字矩阵为:
0122
13**
*4*4
2*3*
输入描述:
第一行两个整数n,m,代表矩阵有n行m列
接下来共n行,每行m个字符
输出描述:
输出共n行m列,为扫雷矩阵。
示例1
输入
4 4
....
..**
*.*.
.*.*
输出
0122
13**
*4*4
2*3*
示例2
输入
3 4
....
*..*
.*.*
输出
1111
*23*
2*3*
备注:
数据范围:
1≤n,m≤10001 \leq n,m\leq 10001≤n,m≤1000
ac代码
#include<iostream>
#include<algorithm>
using namespace std;
char lmap[1010][1010];
int main()
{
int n,m,sum;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>lmap[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{sum=0;
if(lmap[i][j]=='*')
{
cout<<'*';
}
else{
if(lmap[i-1][j-1]=='*')
{sum++;
}
if(lmap[i-1][j]=='*')
{sum++;
}
if(lmap[i][j-1]=='*')
{sum++;
}
if(lmap[i+1][j]=='*')
{sum++;
}
if(lmap[i][j+1]=='*')
{sum++;
}
if(lmap[i+1][j+1]=='*')
{sum++;
}
if(lmap[i-1][j+1]=='*')
{sum++;
}
if(lmap[i+1][j-1]=='*')
{sum++;
}
printf("%d",sum);
}
}printf("\n");
}
return 0;//牛客的题必须加
}