洛谷 - P1162 - 填涂颜色 - 简单搜索

https://www.luogu.org/problemnew/show/P1162

在外面加一圈0把0连起来,然后把所有0换成2,再从(0,0)把连通的2全部改回来。

这也是一个判断内外圈的好办法。

简单的搜索都不要写广搜。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int g[32][32];
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};

int n;

void dfs(int i,int j){
    //cout<<i<<" "<<j<<endl;
    g[i][j]=0;
    for(int k=0;k<4;k++){
        int x=i+dx[k];
        int y=j+dy[k];
        if(x>=0&&x<=n+1&&y>=0&&y<=n+1&&g[x][y]==2)
            dfs(x,y);
    }
}


int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%d",&g[i][j]);
        }
    }

    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=n+1;j++){
            if(g[i][j]==0)
                g[i][j]=2;
        }
    }

    dfs(0,0);

    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            printf("%d%c",g[i][j]," \n"[j==n]);
        }
    }
}

 

posted @ 2019-01-25 02:12  韵意  阅读(212)  评论(0编辑  收藏  举报