[2015年NOIP普及组] 扫雷游戏

设置位移数组dx和dy,在计算某格子周围的地雷数的时候遍历位移数组访问周围的格子,检查边界,统计周围有地雷的格子数
#include<iostream>
char boom[500][500];
char dest[500][500];
bool bound(int x,int y,int n,int m)
{
    return x>=0&&y>=0&&x<m&&y<n;
}
int dx[]={-1, 1, 0,-1, 1,-1, 1, 0};
int dy[]={-1,-1,-1, 0, 0, 1, 1, 1};
int round_boom(int x,int y,int n,int m)
{
    int ret=0;
    for(int i=0;i<8;i++)
    {
        int nx=x+dx[i],ny=y+dy[i];
        if(bound(nx,ny,n,m)&&boom[ny][nx]=='*')
            ret++;
    }
    return ret;
}
int main()
{
    int n,m;
    std::cin>>n>>m;
    for(int y=0;y<n;y++)
        for(int x=0;x<m;x++)
            std::cin>>boom[y][x];
    for(int y=0;y<n;y++)
        for(int x=0;x<m;x++)
        {
            if(boom[y][x]!='*')//不对有地雷的格子做统计
                dest[y][x]=round_boom(x,y,n,m)+'0';//0到9的数转为一个表示此数字符型
            else
                dest[y][x]=boom[y][x];
        }
    for(int y=0;y<n;y++,std::endl(std::cout))
        for(int x=0;x<m;x++)
            std::cout<<dest[y][x];
    
}

 

posted @ 2022-08-21 20:36  nichengmeibeiyong  阅读(79)  评论(0编辑  收藏  举报