Oi_oier 2021-08-21 11:34 采纳率: 83.3%
浏览 82
已结题

紧急支援!到底怎么做QAQ

题目描述
小喻最喜欢玩的游戏就是消消乐,这款游戏的规则如下:

在一个由 N×N 个方格组成的棋盘中,每个方格都是红、黄、蓝、绿这 4 种颜色中的一种,玩家可以点击最底的一行中任意一个方格,点击后与这个方格相邻所有的同色的方块都会被消除,消除的方格上方的方格会因为重力作用垂直落下填补出现的空位。

请你设计一个程序,如果小喻点击最底这行左起第 M 个格子,输出棋盘的情况。

输入格式
第一行两个整数 N,M, N表示棋盘的规模,妈妈点击最底行从左数起的第 M 个方块。

接下来的 N行,每行 N 个由1,2,3,4 组成的数字,表示点击前的棋盘,每个数字间用一个空格隔开。

输出格式
输出 N 行,每行 N个数表示妈妈点击后的棋盘情况,没有方格的位置输出 0 ,每个数字间用一个空格隔开。

样例输入
4 2
1 2 3 4
4 2 4 4
3 4 4 3
1 4 4 3
样例输出
1 0 0 0
4 0 0 0
3 2 0 3
1 2 3 3
数据范围
对于%100%的数据:1≤M≤N≤100。

  • 写回答

5条回答 默认 最新

  • 诺er~ 2021-08-21 13:26
    关注
    
    #include<bits/stdc++.h>
    using namespace std;
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,-1,1};
    int h=1,r=1;
    struct st
    {
        int x,y;
    }q[10010];
    int a[110][110];
    int n,m,s=1;
    int colornum;
    void bfs()
    {
        int xx,yy;
        s=r;
        while(r>=h)
        {
            a[q[r].x][q[r].y]=0;
            for(int i=0;i<4;i++)
            {
                xx=q[r].x+dx[i];
                yy=q[r].y+dy[i];
                if(xx>0&&yy>0&&xx<=n&&yy<=n&&a[xx][yy]==colornum)
                {
                    s++;
                    q[s].x=xx;
                    q[s].y=yy;
                    a[xx][yy]=0;
                }
            }
            r=s;
            h++;
        }
    }
    int main()
    {
        cin>>n>>m;
        q[1].x=m;
        q[1].y=n;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                cin>>a[i][j];
                if(i==n&&j==m) 
                {
                    colornum=a[i][j];
                }
            }
        bfs();
        int l;
        for(int i=1;i<=n;i++)
        {
            for(int j=n-1;j>=1;j--)
            {
                l=j;
                while(a[l+1][i]==0&&l!=n)
                {
                    a[l+1][i]=a[l][i];
                    a[l][i]=0;
                    l++;
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    /*
    4 2
    1 2 3 4
    4 2 4 4
    3 4 4 3
    1 4 4 3
    
    
    */
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月29日
  • 已采纳回答 8月21日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见