1176: 扫雷

1176: 扫雷
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 342 Solved: 144
[Submit][Status][Web Board]
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

Source
/*
思路:明确 周围范围
我不玩扫雷,所以根据生活经验我无法确定范围,所以只能根据样例来推断这个范围
由样例可以发现一个数字周围的范围是以它为中心构成的3x3的正方形

f    f     f
f   num    f
f    f     f

明确这点就好做了。。
一个数字周围最多8个雷,每输入一个数字9就可以确定它周围非雷数字的值应该+1
*/
AC_code:

#include <stdio.h>
int n,m;
int a[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)
{
    a[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&&a[xx][yy]!=9)
        {
            a[xx][yy]++;
        }
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                a[i][j] = 0;
            }
        }
        int num;
        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",a[i][j]);
            }
            puts("");
        }
        puts("");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo Bliss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值