时间限制 | 11 秒/Second(s) | 内存限制 | 512512 兆字节/Megabyte(s) |
题目描述
扫雷是一个经典的游戏,在一个N*M区域中
输入一个N*M的雷区中的k个雷坐标,打印出所有雷区的分布
一个位置如果是雷则表示为*,否则应该是0~8,表示他周围八连通域中的地雷总数。
输入
雷区尺寸 3=<n m="" <="20"
地雷数目 k<=M*N
和他们的坐标xi,yi
输出
雷区的分布
每组后空一行
样例输入复制
3 3 1 1 1 4 4 2 1 2 2 3
样例输出复制
111 1*1 111 0111 01*2 012* 0011
#include<iostream>
#include <algorithm>
#include<cstring>
using namespace std;
const int maxn = 25;
int n,m,k;
int a[maxn][maxn];
void func()
{
memset(a, 0, sizeof(a));
while(k--)
{
int x,y;
cin>>x>>y;
int xi=x+1,yi=y+1;
a[xi][yi] = -1;
//八个方向的判断
if(a[xi-1][yi-1]!=-1) a[xi-1][yi-1]++;
if(a[xi-1][yi]!=-1) a[xi-1][yi]++;
if(a[xi-1][yi+1]!=-1) a[xi-1][yi+1]++;
if(a[xi][yi-1]!=-1) a[xi][yi-1]++;
if(a[xi][yi+1]!=-1) a[xi][yi+1]++;
if(a[xi+1][yi-1]!=-1) a[xi+1][yi-1]++;
if(a[xi+1][yi]!=-1) a[xi+1][yi]++;
if(a[xi+1][yi+1]!=-1) a[xi+1][yi+1]++;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if(a[i][j]==-1)cout<<"*";
else cout<<a[i][j];
}
cout << endl;
}
}
int main()
{
while (cin >> n >> m >> k)
{
func();
cout << endl;
}
return 0;
}