对一半没明白什么情况没考虑下载机会用完了

P1162 填涂颜色

HSyuio77 @ 2023-08-27 19:31:38

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[31][31];
int n;
void sou0(int i,int j)//把2涂成0 
{
    a[i][j]=0;
    if(i<1||i>n||j<1||j>n)
    {
        return;
    }
    if(a[i+1][j]==2)
    {
        sou0(i+1,j);
    }
    if(a[i-1][j]==2)
    {
        sou0(i-1,j);
    }
    if(a[i][j-1]==2)
    {
        sou0(i,j-1);

    }
    if(a[i][j+1]==2)
    {
        sou0(i,j+1);
    }
}
void sou(int i,int j)//0涂成2 
{
    a[i][j]=2;
    if(i<1||i>n||j<1||j>n)
    {
        return;
    }
    if(a[i+1][j]==0)
    {
        sou(i+1,j);
    }
    if(a[i-1][j]==0)
    {
        sou(i-1,j);
    }
    if(a[i][j-1]==0)
    {
        sou(i,j-1);

    }
    if(a[i][j+1]==0)
    {
        sou(i,j+1);
    }
}
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++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==0)
            {
                sou(i,j);//将所以0涂成2 
            }
        }
    }    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if((j==1||j==n)&&(i==1||i==n))
            {
                if(a[i][j]==2)
                {
                    sou0(i,j);//将边界2涂成0 
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;   
}

by wenlebo @ 2023-08-27 19:40:48

@1875311061hsy 把 '(j==1||j==n)&&(i==1||i==n)' 的&&改成||


by wenlebo @ 2023-08-27 19:41:12

&&是判四个角不是判四条边


by HSyuio77 @ 2023-08-27 19:45:47

@wenlebo 对了对了就是这么改谢谢你


by HSyuio77 @ 2023-08-27 19:47:15

@liulechenoo对按照他这个改我就对了


|