32分求助!!!

P1162 填涂颜色

lsy18653707830 @ 2024-06-30 15:37:58

#include<iostream>
using namespace std;
int a[10002][10002],t[4][2]= {-1,0,1,0,0,-1,0,1},n;
struct bfs {
    int x,y;
};
int main() {
    bfs qq[10002];
    int head=1,tail=2;
    qq[1].x=1;
    qq[1].y=1;
    cin>>n;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n; j++) {
            cin>>a[i][j];
        }
    }
    while(head<tail) {
        for(int i=0; i<4; i++) {
            int tx=qq[head].x+t[i][0],ty=qq[head].y+t[i][1];
            if(tx<0||tx>n||ty<0||ty>n) continue;
            if(a[tx][ty]==0) {
                a[tx][ty]=-1;
                qq[tail].x=tx;
                qq[tail].y=ty;
                tail++;
            }
        }
        head++;
    }
    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]==0) {
                cout<<2<<" ";
            } else {
                cout<<1<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

by An__Apple @ 2024-06-30 15:49:23

第一格貌似不一定不在范围内呢······


by Nail9 @ 2024-06-30 16:27:03

@lsy18653707830

搜索范围有误,第10行和第20行:

#include<iostream>
using namespace std;
int a[10002][10002],t[4][2]= {-1,0,1,0,0,-1,0,1},n;
struct bfs {
    int x,y;
};
int main() {
    bfs qq[10002];
    int head=1,tail=2;
    qq[1].x=qq[1].y=0;    // 1 - 改为从(0,0)开始
    cin>>n;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n; j++) {
            cin>>a[i][j];
        }
    }
    while(head<tail) {
        for(int i=0; i<4; i++) {
            int tx=qq[head].x+t[i][0], ty=qq[head].y+t[i][1];
            if(tx<0||tx>n+1||ty<0||ty>n+1) continue;    // 2 - 边界改为n+1
            if(a[tx][ty]==0) {
                a[tx][ty]=-1;
                qq[tail].x=tx;
                qq[tail].y=ty;
                tail++;
            }
        }
        head++;
    }
    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]==0) {
                cout<<2<<" ";
            } else {
                cout<<1<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

by huyinuo @ 2024-06-30 16:30:34

虽然我不知道咋说 但我还是把我的AC代码给你吧

#include<bits/stdc++.h>
using namespace std;
int n,a[40][40];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
void dfs(int x,int y)
{
    a[x][y]=2;
    for(int i=0;i<4;i++)
    {   int nx=dx[i]+x;         
        int ny=dy[i]+y;
        if(a[nx][ny]==0 && nx>=0 && nx<=n+1 && ny>=0 && ny<=n+1) dfs(nx,ny);
    }

}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++) cin>>a[i][j];
    } 
    dfs(0,0);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==2) a[i][j]=0;
            else if(a[i][j]==0) a[i][j]=2;
            cout<<a[i][j]<<" ";
        } 
        cout<<endl;
    }
    return 0;
}

by huyinuo @ 2024-06-30 16:34:29

@huyinuo_ikun 南无阿弥陀佛 希望可以帮到你 5年级的我压根看不出错误 但头文件有问题吧


by lsy18653707830 @ 2024-06-30 16:47:18

已AC,感谢大佬(已关注)


|