top1编程
← 返回题目
题解

【基础】填涂颜色

1 条题解

  • 0
    @ 2026-7-29 0:17:36
    #include <bits/stdc++.h>
    using namespace std;
    int N;
    int fx[5]={0,0,1,0,-1};
    int fy[5]={0,1,0,-1,0};
    int a[50][50];
    void dfs(int x,int y)
    {
            //使用dfs
            for(int i=1;i<5;i++)
            {
                int tx,ty;
                tx=x+fx[i];
                ty=y+fy[i];
                if(x>=1&&y>=1&&a[tx][ty]==0&&x<=N&&y<=N)
                {
                    a[tx][ty]=-1;//标记,并且写入数据
                    dfs(tx,ty);
                }
            }
    }
    int main()
    {
        cin>>N;
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=N;j++)
                cin>>a[i][j];
        }
        //最大边界也就是这个了
        for(int i=1;i<=N;i++)
        {
            if(a[i][1]!=1)
            {
                a[i][1]=-1;
                dfs(i,1);
            }
     
            if(a[i][N]!=1)
            {
                a[i][N]=-1;
                dfs(i,N);
            }
     
        }
        for(int i=1;i<=N;i++)
        {
            if(a[1][i]!=1)
            {
                a[1][i]=-1;
                dfs(1,i);
            }
     
            if(a[N][i]!=1)
            {
                a[N][i]=-1;
                dfs(N,i);
            }
     
        }
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=N;j++)
            {
                if(a[i][j]==-1)cout<<0<<" ";
                else if(a[i][j]==1)cout<<1<<" ";
                else
                    cout<<2<<" ";
    //              cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    
    • 1