32求助

P1162 填涂颜色

ca0vnv @ 2024-01-24 16:57:17

#include<bits/stdc++.h>
using namespace std;
int n,a[35][35];
struct point{
    int x,y;
};
queue<point> q;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j];//输入 
    a[0][0]=2; 
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=n+1;j++){
            if(i==0&&j==0)continue; 
            if((a[i-1][j]==2||a[i+1][j]==2||a[i][j-1]==2||a[i][j+1]==2)&&a[i][j]!=1)//判断在不在圈中 
                a[i][j]=2;//不在圈中设置成2 
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(a[i][j]==1){//如果是围墙输出1 
                cout<<1<<' ';
            }else if(a[i][j]==2){//如果不在圈中输出0 
                cout<<0<<' ';
            }else {
                cout<<2<<' ';
            }
        }
        cout<<endl;
    }
    return 0;
}

by xiao_queen @ 2024-01-24 17:29:28

闭合圈外的0不能保证全是连通的,这种方法只能保证跟a[0][0]有直接或间接联系的0可以被搜到,如果没有这种联系的话就不能被搜到。 (附上特殊样例)

6

0 0 1 1 1 0

1 1 1 0 1 0

1 0 0 0 0 1

1 1 0 1 1 1

0 1 0 1 0 0

0 1 1 1 0 0

写的很差,如果是dalao请见谅

by ca0vnv @ 2024-02-02 10:13:46

@xiao_queen 没我多开了一条边,在最外圈多开了一条边防止这种情况


|