最后那个测试点怎么回事?格式不对吗

P1162 填涂颜色

NYNY111 @ 2024-07-18 22:12:59

```c

include<stdio.h>

int n; int g[33][33]; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void bfs(){ for(int x=0;x<n;x++) for(int y=0;y<n;y++){ if(!g[x][y]){ int nx,ny,flag=0; for(int k=0;k<4;k++){ nx=x,ny=y; while(nx>=0&&ny>=0&&nx<n&&ny<n){ nx+=dir[k][0]; ny+=dir[k][1]; if(g[nx][ny]>0){ flag++; break; } } if(flag==0)break; } if(flag==4)g[x][y]=2; }
} } int main(){ scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&g[i][j]); bfs(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ printf("%d ",g[i][j]); } printf("\n"); } return 0; }


by Andlewzheyao @ 2024-07-19 21:16:22

你这个代码实在不太清晰,不过你这个bfs应该要用队列,你这个方法太容易错了,建议你用stl模板库,直接用queue就行了 方向数组建议用两个一维数组 你直接看我的代码就行了 代码如下

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[31][31];
ll dx[]={0,1,0,-1},dy[]={1,0,-1,0};
struct Node{
    ll x,y;
};
queue<Node> q;
void print(){
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=n;j++){
            if(j!=1) cout<<" ";
            cout<<a[i][j];
        }
        cout<<endl;
    }   
}
void bfs(ll x,ll y){
    a[x][y]=2;
    q.push(Node{x,y});
    while(!q.empty()){
        Node f = q.front();
        for(ll i=0;i<4;i++){
            ll di=f.x+dx[i],dj=f.y+dy[i];
            if(di>=1&&di<=n&&dj>=1&&dj<=n&&a[di][dj]==0){
                a[di][dj]=2;
                q.push(Node{di,dj});
            }
        }
        q.pop();
    }
}
int main(){
    bool f=0;
    cin>>n;
    for(ll i=1;i<=n;i++)
        for(ll j=1;j<=n;j++) cin>>a[i][j];
    ll x,y;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=n;j++){
            if(a[i][j]==1){
                x=i+1,y=j+1;
                f=1;
                break;
            }
        }
        if(f) break;
    }
    bfs(x,y);
    print();
    return 0;
}

记得自己理解!!!!!!!!!!!!


by NYNY111 @ 2024-08-13 17:06:28

@Andlewzheyao 谢谢哈


|