输入描述
输入的第一行包含两个整数 n, m。
第 2 行到第 n + 1行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这一格有地雷。
其中,1≤n,m≤100 分钟后还是在当天。
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。
这题比较水,不用搜索,直接暴力!
AC code:
#include<iostream>
using namespace std;
int n, m;
int arr[105][105];
bool check(int x, int y)//判断坐标是否正常
{
if (x >= 0 && x < n && y >= 0 && y < m)return 1;
return 0;
}
int main()
{
cin >> n>>m;
//输入
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
if (arr[i][j] == 1)arr[i][j] = 9;//是地雷直接赋值为9,后续只需把判断是否为地雷的数改为9即可
}
}
//遍历找空白点
for(int i=0;i<n;i++)
for (int j = 0; j < m; j++)
{
if (arr[i][j] == 0)//找空白点
{
//判断四周八个位置
if (arr[i + 1][j] == 9 && check(i + 1, j))arr[i][j]++;
if (arr[i - 1][j] == 9 && check(i - 1, j))arr[i][j]++;
if (arr[i][j+1] == 9 && check(i, j+1))arr[i][j]++;
if (arr[i][j -1 ] == 9 && check(i, j - 1))arr[i][j]++;
if (arr[i+1][j + 1] == 9 && check(i+1, j + 1))arr[i][j]++;
if (arr[i-1][j - 1] == 9 && check(i-1, j - 1))arr[i][j]++;
if (arr[i-1][j + 1] == 9 && check(i-1, j + 1))arr[i][j]++;
if (arr[i+1][j -1] == 9 && check(i+1, j -1))arr[i][j]++;
}
}
//打印
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}
over~
判断四周也可以: