1 条题解

  • 0
    @ 2025-4-14 18:45:31

    C :

    #include<stdio.h>
    int x[6][6],t,c;
    void xiao(int m,int n)
    {
    	if(m>0&&x[m-1][n]==t){c++;x[m-1][n]=0;xiao(m-1,n);}
    	if(m<5&&x[m+1][n]==t){c++;x[m+1][n]=0;xiao(m+1,n);}
    	if(n>0&&x[m][n-1]==t){c++;x[m][n-1]=0;xiao(m,n-1);}
    	if(n<5&&x[m][n+1]==t){c++;x[m][n+1]=0;xiao(m,n+1);}
    }
    void he1()
    {
    	int i,j,k;
    	for(k=0;k<5;k++)
    		for(i=5;i>0;i--)
    			for(j=0;j<=5;j++)
    				if(x[i][j]==0)
    				{
    					x[i][j]=x[i-1][j];
    					x[i-1][j]=0;
    				}
    }
    void he2()
    {
    	int i,j,k,l;
    	for(l=0;l<5;l++)
    		for(j=0;j<5;j++)
    			for(i=0;i<6;i++)
    			{
    				if(x[i][j]!=0)break;
    				if(i==5)
    					for(k=0;k<6;k++)
    					{
    						x[k][j]=x[k][j+1];
    						x[k][j+1]=0;
    					}
    			}
    }
    void p()
    {
    	int i,j;
    	for(i=0;i<6;i++)
    	{
    		for(j=0;j<6;j++)
    			printf("%d",x[i][j]);
    		printf("\n");
    	}
    }
    int main()
    {
    	int i,j,n,m;
    //	freopen("test.in","r",stdin);
    //	freopen("test.out","w",stdout);
    	while(scanf("%d%d",&m,&n)==2)
    	{
    		for(i=0;i<6;i++)
    			for(j=0;j<6;j++)
    				scanf("%1d",&x[i][j]);
    		m--;n--;
    		t=x[m][n];x[m][n]=0;
    		c=1;xiao(m,n);
    		if(c>=5){he1();he2();p();}else printf("Can't\n");
    	}
    	return 0;
    }
    

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    int d[10][10];
    int dd;
    void dfs(int x,int y,int data){
    	
    	if ((x<1||x>6||y<1||y>6||d[x][y]!=data)) return;
    	
    	dd++;
    	
    	d[x][y]=0;
    	
    	dfs(x-1,y,data);
    	dfs(x+1,y,data);
    	dfs(x,y-1,data);
    	dfs(x,y+1,data);
    	
    }
    
    void move(){
    	
    	for (int i=6;i>=2;i--){
    		for (int s=1;s<=6;s++){
    			if (d[i][s]==0){
    				swap(d[i][s],d[i-1][s]);
    			}
    		}
    	}
    	
    	for (int i=1;i<6;i++){
    		int ok=1;
    		for (int s=1;s<=6;s++){
    			if (d[s][i]!=0){
    				ok=0;
    			}
    		}
    		
    		if (ok){
    			for (int s=1;s<=6;s++){
    				swap(d[s][i],d[s][i+1]);
    			}
    			ok=0;
    		}
    		
    	}
    	
    }
    
    void print(){
    	for (int i=1;i<=6;i++){
    		for (int s=1;s<=6;s++){
    			printf("%d",d[i][s]);
    		}
    		printf("\n");
    	}
    }
    
    int main()
    {
    	int n,m;
    	while(~scanf("%d%d",&n,&m)){
    		dd=0;
    		char as[10][10];
    		for (int i=1;i<=6;i++){
    			scanf("%s",as[i]);
    		}
    		
    		for (int i=1;i<=6;i++){
    			for (int s=0;s<6;s++){
    				d[i][s+1]=as[i][s]-'0';
    			}
    		}
    		
    
    		
    		dfs(n,m,d[n][m]);
    		
    		
    		if (dd<=4){
    			printf("Can't\n");
    			continue;
    		}
    		for (int i=0;i<6;i++)
    			move();
    		
    		print();
    		
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    3579
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者