【搜索】[luoguP1162]填塗顏色

題目

一道很裸的搜索題 我們可以一開始把所有的零賦值成2 然後從四條邊界往裏搜 所有與邊界相鄰的2(能搜到的2)都賦值成0即可 最後輸出整個矩陣

代碼如下



#include<iostream>
#include<cstdio>
#include<cctype>

    using namespace std;
    #define in = read();
    typedef long long ll;
    typedef unsigned int ui;
    const ll size = 50 + 1;

        int n;
        int num;
        int map[size][size];
        bool judge[size][size];
        int h[5] = {0 , 0 , 0 , 1 , -1} , s[5] = {0 , 1 , -1 , 0 , 0};

inline ll read(){
        ll num = 0 , f = 1;    char ch = getchar();

        while(!isdigit(ch)){
                if(ch == '-')   f = -1;
                ch = getchar();
        }
        while(isdigit(ch)){
                num = num*10 + ch - '0';
                ch = getchar();
        }

        return num*f;
}

void dfs(int x , int y){
        for(register int i=1;i<=4;i++)
                if(x + h[i] > 0 && y + s[i] > 0 && x + h[i] <= n && y + s[i] <= n && map[x + h[i]][y + s[i]] == 2){
                        map[x + h[i]][y + s[i]] = 0;
                        dfs(x + h[i] , y + s[i]);
                }
}

int main(){
        n in;
        for(register int i=1;i<=n;i++)
                for(register int j=1;j<=n;j++){
                        num in;
                        if(num == 1)    map[i][j] = 1;
                        if(num == 0)    map[i][j] = 2;
                }

        for(register int i=1;i<=n;i++){
                if(map[i][1] == 2){
                        map[i][1] = 0;
                        dfs(i , 1);
                }
                if(map[i][n] == 2){
                        map[i][n] = 0;
                        dfs(i , n);
                }
                if(map[1][i] == 2){
                        map[1][i] = 0;
                        dfs(1 , i);
                }
                if(map[n][i] == 2){
                        map[n][i] = 0;
                        dfs(n , i);
                }

        }

        for(register int i=1;i<=n;i++){
                for(register int j=1;j<=n;j++)
                        printf("%d " , map[i][j]);
                printf("\n");
        }
        return 0;
}


//COYG
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章