大佬救一下为甚么不对aaaaaaaaaaaaa

P1162 填涂颜色

Hf_Poem @ 2023-05-23 23:08:22

#include<bits/stdc++.h>
#define int long long
#define il inline
using namespace std;
const int N=40;
int n,i,j;
int m[N][N],ans[N][N],vis[N][N];//m存输入,vis标记数组,ans输出数组 
int dx[5]={0,1,0,-1,0},dy[5]={0,0,-1,0,1};//偏移数组 
queue<int>qx,qy;
il void bfs(int x,int y){//传入坐标开始广搜 
    qx.push(x);
    qy.push(y);
    vis[x][y]=1;
    while(!qx.empty()){
        int xx=qx.front(),yy=qy.front();
        qx.pop(),qy.pop();
        for(i=1;i<=4;i++){//四向偏移 
            int xxx=xx+dx[i],yyy=yy+dy[i];
            if(vis[xxx][yyy]==0&&m[xxx][yyy]==0&&xxx>=1&&xxx<=n&&yyy>=1&&yyy<=n){//判定 
                vis[xxx][yyy]=1;
                qx.push(xxx);
                qy.push(yyy);
            }
        }
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);//朴实の加速码 
    cin>>n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cin>>m[i][j];
            ans[i][j]=m[i][j];//同时保存ans和m 
            if(m[i][j]==1)
                vis[i][j]=1;//如果是墙vis提前标记1 
        }
    }
    for(i=1;i<=n;i++){//四个边界搜 
        if(vis[1][i]==0)
            bfs(1,i);
        if(vis[n][i]==0)
            bfs(n,i);
        if(vis[i][1]==0)
            bfs(i,1);
        if(vis[i][n]==0)
            bfs(i,n);
    }
    for(i=1;i<=n;i++){//更新ans 
        for(j=1;j<=n;j++){
            if(vis[i][j]==0)
            ans[i][j]==2;
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cout<<ans[i][j]<<' ';
        }
        cout<<"\n";
    }
    return 0;
}

就是不对qwq

要命了这个


by Lemon_zqp @ 2023-05-24 00:06:01

@baiyang_233 输完样例后除了外面的0,中间都少了1,你看看哪里初始化啥的错了我没仔细看


by Lemon_zqp @ 2023-05-24 00:08:50

@baiyang_233 第52行为什么是==?


by Lemon_zqp @ 2023-05-24 00:09:34

改完了

#include<bits/stdc++.h>
#define int long long
#define il inline
using namespace std;
const int N=40;
int n,i,j;
int m[N][N],ans[N][N],vis[N][N];//m存输入,vis标记数组,ans输出数组 
int dx[5]={0,1,0,-1,0},dy[5]={0,0,-1,0,1};//偏移数组 
queue<int>qx,qy;
il void bfs(int x,int y){//传入坐标开始广搜 
    qx.push(x);
    qy.push(y);
    vis[x][y]=1;
    while(!qx.empty()){
        int xx=qx.front(),yy=qy.front();
        qx.pop(),qy.pop();
        for(i=1;i<=4;i++){//四向偏移 
            int xxx=xx+dx[i],yyy=yy+dy[i];
            if(vis[xxx][yyy]==0&&m[xxx][yyy]==0&&xxx>=1&&xxx<=n&&yyy>=1&&yyy<=n){//判定 
                vis[xxx][yyy]=1;
                qx.push(xxx);
                qy.push(yyy);
            }
        }
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);//朴实の加速码 
    cin>>n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cin>>m[i][j];
            ans[i][j]=m[i][j];//同时保存ans和m 
            if(m[i][j]==1)
                vis[i][j]=1;//如果是墙vis提前标记1 
        }
    }
    for(i=1;i<=n;i++){//四个边界搜 
        if(vis[1][i]==0)
            bfs(1,i);
        if(vis[n][i]==0)
            bfs(n,i);
        if(vis[i][1]==0)
            bfs(i,1);
        if(vis[i][n]==0)
            bfs(i,n);
    }
    for(i=1;i<=n;i++){//更新ans 
        for(j=1;j<=n;j++){
            if(vis[i][j]==0)
            ans[i][j]=2;
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cout<<ans[i][j]<<' ';
        }
        cout<<"\n";
    }
    return 0;
}

by Hf_Poem @ 2023-05-24 21:22:20

@Lemon_zqp 谢谢大佬(磕

手瞎了真的,赋值能打成连等qwq


by NO_OI_NO_LIFE @ 2023-10-08 21:13:51

原来早期白羊连dfs都不会


|