P5121 [USACO18DEC] Mooyo Mooyo S

 

>>>每次有连通块 就一次性删除 +下落+下落后再删除

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------debug\n");
using namespace std;

int n,k,mark[110][15];
char ch[110][15];
int dx[]={0,-1,0,1,0};
int dy[]={0,0,1,0,-1};
int sum=0;

void dfs(int x,int y,char s)
{
    mark[x][y]=1;
    for(int i=1;i<=4;i++)
    {
        int nx=x+dx[i],ny=y+dy[i];
        if(ch[nx][ny]==s&&mark[nx][ny]==0&&nx>=1&&nx<=n&&ny>=1&&ny<=10) 
            sum++,dfs(nx,ny,s);
    }
}
void xialuo()
{
    for(int i=n-1;i>=1;i--)
    {
        for(int j=1;j<=10;j++){
            if(ch[i][j]!='0'){
                int k=i;
                while(ch[k+1][j]=='0'&&k<=n){
                    k++;
                }
                if(k!=i){
                    ch[k][j]=ch[i][j];
                    ch[i][j]='0';
                }
            }
            
        }
        
    }
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=10;j++)
            cin>>ch[i][j];
    
    int f=1;
    while(f)//2   
    {
        f=0;
        for(int i=1;i<=n;i++)// 1    ech time clear+xialuo
        {
            for(int j=1;j<=10;j++)
            {
                if(ch[i][j]!='0')
                {
                    sum=1;  memset(mark,0,sizeof(mark));
                    dfs(i,j,ch[i][j]);
                    if(sum>=k){
                        for(int ii=1;ii<=n;ii++){
                            for(int jj=1;jj<=10;jj++){
                                if(mark[ii][jj]) ch[ii][jj]='0'; 
                            }    
                        }
                    f=1;
                    }
                }
            }
        }
        
        if(f==1) xialuo();
        
    }
    
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=10;j++)
                cout<<ch[i][j];
            cout<<'\n';
        }
    
    
            
        

    return 0;
}
View Code

 

 
posted @ 2023-07-28 14:23  JMXZ  阅读(9)  评论(0)    收藏  举报