嗨害嗨(。。) 2022-06-07 20:22
浏览 20
已结题

泡泡棋 从上往下掉落无法实现 只能从左往右掉落 希望有人来看一下 如果对了加我wx10元

**题目:
小 X 备完课后觉得肚子有点饿,就吃了点最喜欢的好多鱼,喝了厅联想佳沃的佳乐视蓝莓果汁保护下眼睛。看看时间离睡觉还有两个多小时,于是便打开 QQ 游戏,先下了局中国象棋,轻松获胜后心情大畅,又玩了会泡泡棋。 这个游戏在一个充满五彩缤纷的泡泡的长方形板上进行, 在每个回合,玩家选择一组相同颜色的泡泡(玩家只需用鼠标点击这组泡泡中的任意一个即可),之后这些被选中的泡泡就从板上消失了。那些不再被支撑着的气泡便会掉落。如果存在一个空行或空列,那么这个空行或空列将会被移除。 如下图所示:用鼠标点击黑色边框框起来的 7 个黑色泡泡中的任意一个,则框起来的 7 个黑色泡泡就会消失变成第二个图的样子,那些不再被支撑着的黑框中的气泡便会掉落,形成第三个图,第三个图有一个空列,移除这个空列后形成了最终的结果。 每一步的得分是被移除的泡泡的个数的平方。在上面的例子中,这一步的得分为 49
我的程序输出不是从上往下掉落的而是从右往左掉落的 **

(#include<bits/stdc++.h>
using namespace std;
int n,m,a[301][301],b[301][301],s=0,z;
int bx[6]={0,1,-1,0,0};
int by[6]={0,0,0,1,-1};
void dfs(int x,int y)
{
    int xx,yy;
    for(int i=1;i<=4;i++)
    {
        xx=x+bx[i];
        yy=y+by[i];
        if(xx<=n&&yy<=m&&xx>=0&&yy>=0&&a[xx][yy]==z)
        {
            a[xx][yy]=0;
            s++;
            dfs(xx,yy);
        }
    }
}
int main()
{
    int x,y,i,j;
    char d;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cin>>d;
            a[i][j]=d-'0';
        }
    }
    cin>>x>>y;
    z=a[x][y];
    dfs(x,y);
    cout<<s*s<<endl;
    x=0;y=0;
    for(i=1;i<=n;i++)
    {
        ++x;
        for(j=1;j<=m;j++)
        {
            ++y;
            if(a[i][j]>0) b[x][y]=a[i][j];
        }
        y=0;
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<b[i][j];
        }
        cout<<endl;
    }
    return 0;
 } 
)

输入:
3 5
31233
12211
33233
2 3

运行结果:
16
30330
11110
33330

我的:
16
31033
10011
33033

代码答案错误AC:30%

检查了好几次,我的深搜应该是没问题的,就是我的掉落有问题,不知道该如何实现从上往下掉落
想到了这个就是一个连通块和数组移动的组合可代码中还是实现不了

  • 写回答

1条回答 默认 最新

  • 嗨害嗨(。。) 2022-06-07 21:43
    关注

    OK了铁汁们哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈我终于做出来了!!!!!看我代码
    1.定义要long
    2.判断只有一行的!!
    我拿不到满分就是因为没有判断一行的
    加油加油!
    AC代码哦~~~~~~

    
    
    
    
    
    
    #include <bits/stdc++.h>
    using namespace std;
    long n,m,s=0;
    long c[305][305],b[305][305];
    long bx,by,z;
    int ex[5]={0,1,0,-1,0};
    int ey[5]={0,0,1,0,-1};
    void dfs(int x,int y)
    {
        int xx,yy;
        for(int i=1;i<=4;i++)
        {
            xx=x+ex[i];
            yy=y+ey[i];
            if(xx<=n&&yy<=m&&xx>0&&yy>0&&c[xx][yy]==z)
            {
                c[xx][yy]=0;
                s++;
                dfs(xx,yy);
            }
        }
    }
    bool yu(int i) 
    {
        for(int j=1;j<=m;j++) 
        {
            if(c[j][i])
                return false;
        }
        return 1;
    }
    void g(int k) 
    {
        for(int i=1;i<=n;i++) 
        {
            for(int j=k;j<=m;j++) 
            {
                c[i][j]=c[i][j+1];
            }
        }
        return ;
    }
    void gt(int x,int y) 
    {
        for(int i=x;i>=1;i--) 
        {
            c[i][y]=c[i-1][y];
        }
        return ;
    }
    int main() 
    {    
        
        cin>>n>>m;
        for(int i=1;i<=n;i++) 
        {
            for(int j=1;j<=m;j++)
            {
                char cc;
                cin>>cc;
                c[i][j]=cc-'0';
            }
        }
        cin>>bx>>by;
        z=c[bx][by];
        dfs(bx,by);
        cout<<s*s<<endl;
        if(n==1)
        {
            int x=0,y=0;
                for(int j=1;j<=m;j++)
                {
                    if(c[1][j]!=0) b[1][++y]=c[1][j];
                }
                for(int j=1;j<=m;j++)
                {
                    cout<<b[1][j];    
                }
                cout<<endl;
            return 0;
        }
        
        
        for(int i=1;i<=n;i++) 
        {
            if(yu(i)) 
                g(i);
        }
        for(int i=1;i<=n;i++) 
        {
            for(int j=1;j<=m;j++) 
            {
                if(c[i][j]==0) 
                {
                    gt(i,j);
                }
            }
        }
        for(int i=1;i<=n;i++) 
        {
            for(int j=1;j<=m;j++)
                cout<<c[i][j];
            cout<<endl;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 已采纳回答 6月7日
  • 创建了问题 6月7日

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥15 pyqt信号槽连接写法
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注