它!甚!至!没!有!输!出!
查看原帖
它!甚!至!没!有!输!出!
719843
lizhuorong楼主2024/4/6 14:52
#include <bits/stdc++.h>
using namespace std;
int a[501][502];
int xd[4]={1,-1,0,0};
int yd[4]={0,0,-1,1};
queue<short int>q;
int n,m,A,b;
int c[100001],d[100001];
bool s(int num,int sum){
	if(num>=1&&num<=n&&sum>=1&&sum<=m){
		return true;
	}
	return false;
}
void BFS(){
    short int x,y,z;
	while(!q.empty()){
		x=q.front();
		q.pop();
		y=q.front();
		q.pop();
		z=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			if(s(x+xd[i],y+yd[i])&&a[x+xd[i]][y+yd[i]]<=0){
				q.push(x+xd[i]);
				q.push(y+yd[i]);
				q.push(z+1);
				if(a[x+xd[i]][y+yd[i]]==-1) b--;
				a[x+xd[i]][y+yd[i]]=z+1;
			}
		}
		if(b==0){
			return;
		}
	}
}
int main(){
	
	short int x,y;
	cin>>n>>m>>A>>b; 
	for(int i=1;i<=A;i++){
		cin>>x>>y;
		a[x][y]=1;
		q.push(x);
		q.push(y);
		q.push(0);
	}
	for(int i=1;i<=b;i++){
		cin>>c[i]>>d[i];
		a[c[i]][d[i]]=-1;
	}
	BFS();
	for(int i=1;i<=b;i++){
		cout<<a[c[i]][d[i]]<<endl;
	}
}
2024/4/6 14:52
加载中...