求助

P1162 填涂颜色

JuN_xI @ 2023-09-10 20:41:58

WA了最后一个点

#include<bits/stdc++.h>
using namespace std;
long long n,a[50][50],f[50][50];
bool flag=0;
void dfs(int x,int y)
{
    if(flag == 1) return;
    f[x][y] = 1;
    if(a[x + 1][y]==-1) flag = 1;
    else if(a[x - 1][y] == -1) flag = 1;
    else if(a[x][y + 1] == -1) flag = 1;
    else if(a[x][y - 1] == -1) flag = 1;
    else if(a[x + 1][y] == 0 && !f[x + 1][y]) dfs(x + 1,y);
    else if(a[x - 1][y] == 0 && !f[x - 1][y]) dfs(x - 1,y);
    else if(a[x][y + 1] == 0 && !f[x][y + 1]) dfs(x,y + 1);
    else if(a[x][y - 1] == 0 && !f[x][y - 1]) dfs(x,y - 1);
    f[x][y]=0;
}
void dfs2(int x,int y)
{
    a[x][y] = 2;
    if(a[x + 1][y] == 0) dfs(x + 1,y);
    if(a[x - 1][y] == 0) dfs(x - 1,y);
    if(a[x][y + 1] == 0) dfs(x,y + 1);
    if(a[x][y - 1] == 0) dfs(x,y - 1);
}
int main()
{
    cin>>n;
    memset(a,-1,sizeof(a));
    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++)
    {
        for(int j = 1;j <= n;j++)
        {
            if(a[i][j] == 0)
            {
                flag = 0;
                dfs(i,j);
                if(flag == 0)
                    dfs2(i,j);
            }
        }
    }
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= n;j++)
            cout<<a[i][j]<<" ";
        cout<<"\n";
    }

    return 0;
}

|