The Unknown Way

题解 CF984B 【Minesweeper】

我还是太弱了

纯模拟,判断每一个数字周围雷的数量是否与原地图相等(空视为0)

注意换行

不写边界判断我太懒了,因此读入时下标起始为1

下面贴代码

#include<iostream>
using namespace std;
char map[200][200];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            cin>>map[i][j];
            if(map[i][j]=='.')map[i][j]='0';
        }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(map[i][j]=='*')continue;
            int tmp=0;
            for(int k=-1;k<=1;k++)
                for(int t=-1;t<=1;t++)
                {
                    if(k==t&&k==0)continue;
                    if(map[i+k][j+t]=='*')tmp++;
                }
            if((map[i][j]-'0')!=tmp)
            {
                cout<<"NO\n";
                return 0;
            }
        }
    cout<<"YES\n";
    return 0;
}

其实还可以设一个数组

const move[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};

然后原k,t的循环改为

for(int k=0;k<8;k++)
if(map[i+move[k][0]][j+move[k][1]]=='*')tmp++;

该题数据范围可以是 $1<m,n<3500$

另一道题


2019-05-23 12:48:12 in 题解