10分求助
查看原帖
10分求助
758242
qiang2013楼主2024/4/1 19:22

10分求助

#include<bits/stdc++.h>
using namespace std;
bool vis[510][510];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int n,m,a,b;
int x[510],y[510];
int X[510],Y[510];
struct node{
	int zx,zy;
};
queue<node> q;
int ans[510][510];
void bfs(){
	while(!q.empty()){
		node ct=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			int nx=ct.zx+dx[i],ny=ct.zy+dy[i];
			if(nx<1||nx>n||ny<1||ny>m)continue;
			if(vis[nx][ny]==true)continue;
			vis[nx][ny]=true;
			q.push(node{nx,ny});
			ans[nx][ny]=ans[ct.zx][ct.zy]+1;
		}
	}
}
int main(){
	cin>>n>>m>>a>>b;
	for(int i=1;i<=a;i++){
		cin>>x[i]>>y[i];
		vis[x[i]][y[i]]=true;
		q.push(node{x[i],y[i]});
	}
	for(int i=1;i<=b;i++){
		cin>>X[i]>>Y[i];
	}
	bfs();
	for(int i=1;i<=b;i++){
		cout<<ans[X[i]][Y[i]]<<"\n";
	}
	return 0;
}
2024/4/1 19:22
加载中...