- 思路:
在输入的时候其实就可以开始记录值了,相比较对每一个格子,深度遍历地雷数,我觉得每次有地雷了,在地雷的周围加1这样比较方便,要注意的是要判断边界条件,还有我地雷格子值是-1,要让-1的格子的值不会因为受周围的地雷格子++;
#include <stdio.h>
#include <iostream>
using namespace std;
const int maxn = 110;
int main()
{
int Flag[maxn][maxn] = { 0 };
int dx[8] = { 1,1,0,-1,-1,-1,0,1 };
int dy[8] = { 0,1,1,1,0,-1,-1,-1 };
int m, n;
cin >> m >> n;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
char temp;
cin >> temp;
if (temp == '*')
{
Flag[i][j] = -1;
for (int k = 0; k < 8; k++)
{
int nowX = i + dx[k];
int nowY = j + dy[k];
if (nowX >= 0 && nowX < m && nowY >= 0 && nowY < n && Flag[nowX][nowY] != -1)
{
Flag[nowX][nowY]++;
}
}
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (Flag[i][j] == -1)
{
printf("*");
}
else
{
printf("%d", Flag[i][j]);
}
}
printf("\n");
}
}
|