0分求助
查看原帖
0分求助
490978
小超手123楼主2021/8/24 13:03
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
int vis[600][600];
int ans[600][600];
int next[5][3]={{1,0},{0,1},{-1,0},{0,-1}};
struct node{
	int x,y,d;
};
queue<node>Q;
void bfs(int x,int y){
	memset(vis,0,sizeof(vis));
	Q.push((node){x,y,0});
	vis[x][y]=1;
	ans[x][y]=0;
	while(!Q.empty()){
		node now=Q.front();
		Q.pop();
		for(int i=0;i<4;i++){
			int dx=now.x+next[i][0],dy=now.y+next[i][1];
			if(dx<1||dx>n||dy<1||dy>m||vis[dx][dy]==1)continue;
			ans[dx][dy]=min(ans[dx][dy],now.d+1);
			vis[dx][dy]=1;
		}
	}
}
int main() {
	memset(ans,0x7f,sizeof(ans));
    cin>>n>>m>>a>>b;
    for(int i=1;i<=a;i++){
    	int x,y;
    	cin>>x>>y;
    	bfs(x,y);
	}
	for(int i=1;i<=b;i++){
		int x,y;
		cin>>x>>y;
		cout<<ans[x][y];
	}
	
    return 0;
}
2021/8/24 13:03
加载中...