zcmu-1176

来源:互联网 发布:javascript 图 编辑:程序博客网 时间:2024/05/22 05:02

1176: 扫雷

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 249  Solved: 101
[Submit][Status][Web Board]

Description

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

Input

多组测试数据.每组数据的第一行包含两个正整数n,m(1<=n,m<=100).接下来n行每行有m个不是9就是-1的整数.9代表这个位置有雷,-1代表这个位置是数字.

Output

对于每组测试数据输出一个n*m的补全后的矩阵.用一个空行分隔两个矩阵.注意最有一个矩阵后面没有空行.

Sample Input

2 39 -1 9-1 -1 92 49 -1 -1 -19 9 9 9

Sample Output

93913994329999

HINT

Source

分析:简单的bfs,直接对矩阵里不是9的寻找它周围是雷的数目,然后直接输出。

坑点:题目最后面说“注意最有一个矩阵后面没有空行”,我以为真的要弄一个什么标记什么的去除最后一个矩阵的空行,但是第一次直接交就给过了,不知道题目说这个有什么意思。

代码;

#include<iostream>#include<cstdio>#include<algorithm>#define M 100+10using namespace std;int a[M][M];void bfs(int n,int m){    int z=0;    for(int i=0; i<n; i++)    {        for(int j=0; j<m; j++)        {            z=0;            if(a[i][j]==9)                printf("9");            else            {                for(int x=-1; x<2; x++)                    for(int y=-1; y<2; y++)                    {                        int p=i+x;                        int q=j+y;                        if(p>=0&&p<n&&q>=0&&q<m)                        {                            if(a[p][q]==9)                                z++;                        }                    }                printf("%d",z);            }        }        printf("\n");    }}int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        for(int i=0; i<n; i++)            for(int j=0; j<m; j++)                scanf("%d",&a[i][j]);        bfs(n,m);        printf("\n");    }    return 0;}



原创粉丝点击