ZCMU 1176

1176: 扫雷

Description

大家都应该玩过扫雷这个游戏吧.就是在一个nm的矩阵中有若干个雷,你需要将他们全部找出来才能获得胜利.其他格子用数字表示代表这个格子周围有几个雷.如果在一个nm的矩阵中我已经告诉你所有雷的位置,你能将这个矩阵补全嘛?

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
2 4
9 -1 -1 -1
9 9 9 9

Sample Output

939
139

9432
9999

HINT
模拟题。非常的模拟
Code:

#include<stdio.h>
int n,m;
int map[105][105];
int step_x[]= {1,-1,1,1,0,0,-1,-1},step_y[]= {0,0,1,-1,1,-1,1,-1};
void update(int x,int y)
{
    map[x][y] = 9;
    for(int i = 0; i < 8; i++)
    {
        int xx = x + step_x[i];
        int yy = y + step_y[i];
        if(xx>=0&&xx<n&&yy>=0&&yy<m&&map[xx][yy]!=9)
        {
            map[xx][yy]++;
        }
    }
}
int main()
{
    int f=1,num;
    while(~scanf("%d %d",&n,&m))
    {
        if(!f)
        {
            printf("\n");
        }
            f=0;
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                map[i][j] = 0;
            }
        }
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                scanf("%d",&num);
                if (num == 9)
                    update(i,j);
            }
        }
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
                printf("%d",map[i][j]);
            printf("\n");
        }

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44941429/article/details/91128093