x坐标从 y轴负半轴开始逆时针走。
y左边从 x轴正半轴开始顺时针走。
code
#include<iostream>
using namespace std;
int n, m;
char a[105][105];
int dx[8] = { 0,1,1,1,0,-1,-1,-1 };
int dy[8] = { 1,1,0,-1,-1,-1,0,1 };
void bfs()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
int sum = 0;
if (a[i][j] == '?')
{
for (int k = 0; k <= 7; k++)
{
int tempx = i + dx[k];
int tempy = j + dy[k];
if (tempx < 0 || tempx >= n || tempy < 0 || tempy >= m || a[tempx][tempy] == '?')continue;
if (a[tempx][tempy] == '*')
{
sum++;
}
}
a[i][j] = char(sum + '0');
}
}
}
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> a[i][j];
}
}
bfs();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << a[i][j];
}
cout << endl;
}
return 0;
}