Description
大家都应该玩过扫雷这个游戏吧.就是在一个n*m的矩阵中有若干个雷,你需要将他们全部找出来才能获得胜利.其他格子用数字表示代表这个格子周围有几个雷.如果在一个n*m的矩阵中我已经告诉你所有雷的位置,你能将这个矩阵补全嘛?
Input
多组测试数据.每组数据的第一行包含两个正整数n,m(1<=n,m<=100).接下来n行每行有m个不是9就是-1的整数.9代表这个位置有雷,-1代表这个位置是数字.
Output
对于每组测试数据输出一个n*m的补全后的矩阵.用一个空行分隔两个矩阵.注意最后一个矩阵后面没有空行.
Sample Input
2 3
9 -1 9
-1 -1 9
Sample Output
939
139
非常简单又直白的题目
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
using namespace std;
int a[100][100];
int n,m;
void update(int i,int j) {
if (i<0||j<0||i>=n||j>=m)
return;
if (a[i][j] == 9)
return;
a[i][j]++;
}
int main()
{
int i,j;
bool flag = false;
while (~scanf("%d%d",&n,&m)) {
if (flag)
printf("\n");
flag = true;
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
scanf("%d",a[i]+j);
a[i][j] += a[i][j]==-1?1:0;
}
}
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
if (a[i][j] == 9) {
update(i-1,j-1);
update(i-1,j);
update(i-1,j+1);
update(i,j-1);
update(i,j+1);
update(i+1,j-1);
update(i+1,j);
update(i+1,j+1);
}
}
}
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
printf("%d",a[i][j]);
}
printf("\n");
}
}
return 0;
}