码迷,mamicode.com
首页 > 其他好文 > 详细

[CodeForces984B]Minesweeper

时间:2018-06-16 21:50:16      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:ios   ret   TE   def   IV   names   方向   mat   str   

Translate

给出一个扫雷地图(大家肯定都玩过),让你求这个地图是否合法。 对于地图是否合法有两个规则:

  • 对应点的数字周围必须有对应数字个雷
  • 空的地方周围没有雷

思路:

这道题就是验证扫雷内部的东西对不对,假如有一个(炸弹),那么它的八连通块都得加一,如果一个格子是\(0\)则显示“.”。于是只要找到然后用另一个数组把它周围都加一,最后两个数组比较一下即可。

Code

#include<iostream>
#include<cstring>
using namespace std;
int n,m;
char maze[101][101];
int d[101][101];
int dx[8]= {-1,-1,-1,0,0,1,1,1},dy[8]= {-1,0,1,1,-1,-1,0,1}; //非常实用的方向数组(dfs很常见)
void add(int x,int y)
{
    int i;
    for(i=0; i<8; i++) //借助方向数组枚举8个方向
    {
        int nx=x+dx[i],ny=y+dy[i];
        if(nx>=0&&nx<n&&ny>=0&&ny<m&&maze[nx][ny]!='*')
            d[nx][ny]=d[nx][ny]+1;
    }
}
int main()
{
    cin>>n>>m;
    memset(d,0,sizeof(d));  //保险起见
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            cin>>maze[i][j];
        }
    }  //读入
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            if(maze[i][j]=='*')
                add(i,j); //假如有一个*(炸弹),那么它的八连通块都得加一
        }
    }
    int k=0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            if(maze[i][j]=='.'&&d[i][j]!=0)//如果这里是.但是d不为0,代表周围有雷,那么不合法(很巧妙)
            {
                k=1;
                break;
            }
            else
                if(maze[i][j]=='.')
                    continue;
                else
                    if(maze[i][j]=='*')
                        continue;
                    else
                        if((int)(maze[i][j])-48!=d[i][j])//如果当前是数字,但是和预处理的不一样,照样不合法
                        {
                            k=1;    //如果提前算出的地图上的
                            break;
                        }
        }
    }
    if(k==0)//输出结果
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
    return 0;
}

}  

[CodeForces984B]Minesweeper

标签:ios   ret   TE   def   IV   names   方向   mat   str   

原文地址:https://www.cnblogs.com/lyfoi/p/9191427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!