14416 扫雷完成图

题目描述
扫雷游戏完成后会显示一幅图,图中标示了每个格子的地雷情况。现在,一个 n * n 方阵中有 k 个地雷,请你输出它的扫雷完成图。
输入
输入共 k+1 行:
第 1 行为 2 个整数 n、k,用一个空格隔开,表示扫雷图方阵的规模和地雷的总数。
接下来 k 行,每行 2 个整数,表示一个地雷的行、列坐标。

输出
输出共 n 行,每行连续 n 个字符,每个字符对应扫雷完成图的一个格子。字符内容定义如下:
(1)若该位置对应的格子是地雷,则输出“*”(英文星号);
(2)若该位置对应的格子不是地雷,其相邻格(指环绕它的左上、上、右上、右、右下、下、 左下、左,共 8 个格子)有地雷,则输出相邻格地雷总数;
(3)若该位置对应的格子不是地雷,其相邻格也没有地雷,则输出空格。

样例输入 Copy
9 5
2 7
3 7
8 9
9 9
3 5
样例输出 Copy
111
1132
1
3*2
11211

   11
   2*
   2*

提示
对于 20%的数据:n ≤ 10,k ≤ 10;
对于 60%的数据:n ≤ 20,k ≤ 100;
对于 100%的数据:n ≤ 30,k ≤ 150,并确保所有地雷位置不重复。

并不是一道很难的题,我是写了一个函数去判断一个点周围的地雷个数,然后就根据条件输出就好了

#include <bits/stdc++.h>
using namespace std;
int a[160][160],i,j;
void fun(int i,int j)
{
    int cnt=0;
    int x,y;
    for(x=i-1;x<=i+1;x++)
    {
        for(y=j-1;y<=j+1;y++)
        {
            if(a[x][y]==-1)
            {
                cnt++;
            }
        }
    }
    a[i][j]=cnt;
}
int main()
{
    int n,k,c,d;
    cin>>n>>k;
    int i;
    for(i=0;i<k;i++)
    {
        cin>>c>>d;
        a[c-1][d-1]=-1;
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(a[i][j]>=0)
            {
                fun(i,j);
            }
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(a[i][j]>0)
            {
                cout<<a[i][j];
            }
            if(a[i][j]==0)
            {
                cout<<" ";
            }
            if(a[i][j]==-1)
            {
                cout<<"*";
            }
        }
        cout<<endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值