P1332
查看原帖
P1332
247220
StarryWander楼主2020/10/27 22:40

我的代码遍历有问题,但是又找不到具体原因,麻烦大佬看一下,谢谢(可以复制下来看一下,调试的语句已经写好了,其中样例的(5,1),(5,2)从(5,3)遍历不过去,不知道为什么)

#include<bits/stdc++.h>
using namespace std;
struct node{
    int x,y,id;
};
int n,m;
node off[4]={{0,1},{1,0},{-1,0},{0,-1}}; 
int mp[1001][1001];
bool vis[1001][1001];
int a,b;
queue<node>q;
int cnt;
void bfs(){
    while(!q.empty()){
    	//if(cnt==b) break;
        int tid=q.front().id+1;
        for(int i=0;i<4;i++){
            int tx=q.front().x+off[i].x;
            int ty=q.front().y+off[i].y;
            if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&mp[tx][ty]==0&&vis[tx][ty]==0){
                q.push((node){tx,ty,tid});
                mp[tx][ty]=tid;
                vis[tx][ty]=1;
            }
            if(mp[tx][ty]==-2&&vis[tx][ty]==0){
            	cnt++;
            	mp[tx][ty]=tid;
            	vis[tx][ty]=1;
			}
        }
        /* 
        cout<<endl;
        for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				printf("%-5d",mp[i][j]);
			}
			cout<<endl;
		}
        q.pop();
        //*/ 
    }
}
int main(){
    cin>>n>>m>>a>>b;
    queue<node>cf;
    for(int i=1;i<=a;i++){
    	int x,y;
    	cin>>x>>y;
    	mp[x][y]=-1;
    	q.push((node){x,y,0});
	}
	for(int i=1;i<=b;i++){
		int x,y;
		cin>>x>>y;
		mp[x][y]=-2;
		cf.push((node){x,y});
	}
	/*
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%-5d",mp[i][j]);
		}
		cout<<endl;
	}
	//*/
    bfs();
    int p=cf.size();
	for(int i=1;i<=p;i++){
		cout<<mp[cf.front().x][cf.front().y]<<endl;
		cf.pop();
	}
	/*
    cout<<endl;
    for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%-5d",mp[i][j]);
		}
		cout<<endl;
	}
	//*/
    return 0;
}

2020/10/27 22:40
加载中...