#include <stdio.h>
char judge(char c,char b[][1000],int r,int s,int n,int m)
{
char t;
int count=0;
if(c=='*')
{
t='*';
}
else
{
if(r-1>=0&&b[r-1][s]=='*')
{
count++;
}
if(r-1>=0&&s-1>=0&&b[r-1][s-1]=='*')
{
count++;
}
if(r-1>=0&&s+1<m&&b[r-1][s+1]=='*')
{
count++;
}
if(s-1>=0&&b[r][s-1]=='*')
{
count++;
}
if(s+1<m&&b[r][s+1]=='*')
{
count++;
}
if(s-1>=0&&r+1<n&&b[r+1][s-1]=='*')
{
count++;
}
if(r+1<n&&b[r+1][s]=='*')
{
count++;
}
if(s+1<m&&r+1<n&&b[r+1][s+1]=='*')
{
count++;
}
t=count+'0';
}
return t;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
getchar();//吸收换行符。
char a[1000][1000];
for(int i=0;i<n;i++)
{
scanf("%s",a[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%c",judge(a[i][j],a,i,j,n,m));
}
printf("\n");
}
return 0;
}
8个方向暴力求解即可。

京公网安备 11010502036488号