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

泡泡棋 从上往下掉落无法实现 只能从左往右掉落 希望有人来看一下 如果对了加我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 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿