扫雷

游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。

Example:

for map:

*...
....
.*..
....

we have:

*100
2210
1*10
1110

I/O format:

--input--

输入有多组数据,每组数据的第一行有两个数字,m,n(0<m,n<100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。“*” 表示有地雷,“.”表示无地雷。最后一组数据m=0,n=0表示输入结束,不需要处理。

--output--

#x:

其中 x 是当前地图的编号(从 1 开始)。下面的 n 行则将地图中的 "." 以数字表示,该数字表示该方格周围有多少颗地雷。

--example input--

4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0

--example output--

Field #1:
*100
2210
1*10
1110

Field #2:
**100
33200
1*100

Code

//
// Created by Zirui Tao on 1/12/2018.
//

#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#define max std::max
#define min std::min
//布局
char block[101][101];
//格子周围雷数
int num[101][101];

//int max(int a,int b)
//{
//    return a>b?a:b;
//}
//int min(int a,int b)
//{
//    return a<b?a:b;
//}

int input(int raw,int colum)
{
    /**输入扫雷布局*/
    memset(block,'0',sizeof(block));
    for(int i=0;i<raw;++i)
    {
        for(int j=0;j<colum;++j)
        {
            scanf("%c",&block[i][j]);
        }
        scanf("%*c");
    }
    printf("%c", block[0][0]);
    return 0;
}

int mineNum(int raw,int colum)
{
    for(int i=0;i<raw;i++)
    {
        for(int j=0;j<colum;j++)
        {
            num[i][j]=0;
            if(block[i][j]=='*')
            {
                printf("*");
            }
            else
            {
                //上下,行,区间左端点的最大值(>=0),区间右端点的最小值(<=row-1)
                for(int k=max(i-1,0);k<=min(i+1,raw-1);k++)
                {
                    for(int t=max(j-1,0);t<=min(j+1,colum-1);t++)
                    {
                        if(block[k][t]=='*')
                        {
                            num[i][j]++;
                        }
                    }
                }
                printf("%d",num[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}
int main()
{
    int time=0;
    int raw,col;
    while(scanf("%d%d",&raw,&col)!=EOF)
    {
        //输入行列后又回车了,所以回车也算一个字符……
        scanf("%*c");
        printf("raw:%d, col:%d\n", raw, col);
        if(raw==0&&col==0)
            exit(0);
        else
        {
            input(raw,col);
            printf("Field#%d\n",++time);
            mineNum(raw,col);
        }
    }
    return 0;
}

results matching ""

    No results matching ""