1 条题解

  • 1
    @ 2023-11-19 16:54:31
    #include<bits/stdc++.h>
    using namespace std;
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,1,-1};
    int a[110][110],n,m,vis[110][110],b;
    void dfs(int x,int y){
    	vis[x][y]=1;
    	a[x][y]=0;
    	for(int i=0;i<4;i++){
    		int xx=x+dx[i];
    		int yy=y+dy[i];
    		if(xx<1||xx>n||yy<1||yy>n) continue;
    		if(a[xx][yy]!=b) continue;
    		if(vis[xx][yy]==0){
    			vis[xx][yy]=1;
    			dfs(xx,yy);
    			vis[xx][yy]=0;
    		}
    	}
    	return ;
    }
    int main(){
    	memset(vis,0,sizeof(vis));
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			cin>>a[i][j];
    		}
    	}
    	b=a[n][m];
    	dfs(n,m);
    	for(int i=n-1;i>=1;i--){
    		for(int j=1;j<=n;j++){
    			if(a[i][j]!=0){
    				int k=i+1;
    				while(a[k][j]==0&&k<=n){
    					k++;
    				}
    				k--;
    				if(a[k][j]==0) swap(a[k][j],a[i][j]);
    			}
    		}
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			cout<<a[i][j]<<' ';
    		}
    		cout<<endl;
    	} 
    	return 0;
    }
    
    • 1

    信息

    ID
    3014
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    168
    已通过
    52
    上传者