题目:传送门
看到这种矩阵以为要搜索的,写了想起来只是在查探自己周围的状况,没有下一步的转移,所以不是搜索。
- 把数组从1开始用可以避免边界问题的麻烦。
- 注意格式,本题首先需要一个field提示,然后每个矩阵之间需要空行(但最后一个矩阵不需要)。所以先输出空行再输出矩阵。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define ll long long
#define maxn 110
char matrix[maxn][maxn];
int m, n, ans[maxn][maxn];
int step[8][2]={{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};
void cnt(int x, int y){
for(int t = 0;t < 8;t++){
if(matrix[x+step[t][0]][y+step[t][1]]=='*'){
ans[x][y]++;
}
}
}
int main()
{
int tc= 0;
while(scanf("%d%d", &m,&n) && m != 0 && n != 0){
tc++;
memset(matrix, 0, sizeof(matrix));
memset(ans, 0, sizeof(ans));
for(int i = 1;i <= m;i++){
getchar();
for(int j = 1;j <= n;j++){
scanf("%c", &matrix[i][j]);
}
}
if(tc != 1){
printf("\n");
}
printf("Field #%d:\n", tc);
for(int i = 1;i <= m;i++){
for(int j = 1;j <= n;j++){
if(matrix[i][j] == '*'){
printf("*");
}
else{
cnt(i, j);
printf("%d", ans[i][j]);
}
}
printf("\n");
}
}
return 0;
}