48分,求帮助

P1162 填涂颜色

yangbowen666 @ 2024-07-15 10:03:24

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

char c[120][120];

int w,h,n;

int tx[5]={0,0,1,0,-1};
int ty[5]={0,1,0,-1,0};

int a[120][3];

int C=0;

bool f[120][120];

int b=n;

void bfs(int x,int y)
{
    if(x==n||y==n||x==1||y==1)
    {
        for(int i=1;i<=b;i++)
        {
            c[a[i][1]][a[i][2]]='0';
        }
        return ;
    }
    f[x][y]=true;
    b++;
    c[x][y]='2';
    a[b][1]=x;
    a[b][2]=y;
    for(int i=1;i<=4;i++)
    {
        int fx=x+tx[i];
        int fy=y+ty[i];
        if(f[fx][fy]==false&&c[fx][fy]=='0')
        {
            bfs(fx,fy);
        }
    }
}
int main(){
    for(int i=1;i<=20;i++)
    {
        for(int j=1;j<=20;j++)
        {
            f[i][j]=false;
        }
    }
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>c[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(c[i][j]=='0'&&f[i][j]==false)
            {
                b=0;
                bfs(i,j);
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cout<<c[i][j]<<" ";
        }
        cout<<"\n";
    }
    return 0;
}

by Enoch2013 @ 2024-07-15 10:05:00

@yangbowen666 ac代码:

#include<bits/stdc++.h>
using namespace std;
int a[35][35],b[35][35],n,dx,dy;
int d[2][4]={{1,-1,0,0},{0,0,1,-1}};
struct node{
    int r,c;
};
void BFS(){
    node m;
    queue<node> q;
    m.c=0,m.r=0;
    q.push(m);
    while(!q.empty()){
        node front=q.front();
        q.pop();
        for(int i=0;i<4;++i){
            dx=front.r+d[0][i];
            dy=front.c+d[1][i];
            if(dx>=0&&dx<=n+1&&dy>=0&&dy<=n+1&&a[dx][dy]==0){
                a[dx][dy]=-1;
                node m1;
                m1.r=dx,m1.c=dy;
                q.push(m1);
            }
        }

    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            scanf("%d",&a[i][j]);
    for(int i=0;i<=n+1;++i){
        a[0][i]=0;
        a[n+1][i]=0;
        a[i][0]=0;
        a[i][n+1]=0;
    }
    BFS();
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j){
            if(a[i][j]==-1)
                printf("0 ");
             else if(a[i][j]==0)
                printf("2 ");
            else
                printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

求关注,qwq


|