救命,10分的bfs
查看原帖
救命,10分的bfs
181715
gjh303987897楼主2022/3/2 21:21
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int jump_x[5]={0,1,-1,0,0};
const int jump_y[5]={0,0,0,1,-1};
struct data{
	int nx,ny;
}t[100001];
int n,m,a,b,vis[1001][1001];
int vris_x[1001],vris_y[1001];
int king_x[1001],king_y[1001];
int ans[1001][1001],map[1001][1001];
int l,r;
void bfs(){
    int pd=0;
	for(int i=1;i<=a;i++){
		t[++r].nx=vris_x[i];
		t[r].ny=vris_y[i];
		ans[t[r].nx][t[r].ny]=0;
		if(map[t[r].nx][t[r].ny]==2){
			pd++; vis[t[r].nx][t[r].ny]=1;
		}
	}
	l=1; 
	while(l<=r){
		for(int i=1;i<=4;i++){
			int xx=t[l].nx+jump_x[i],yy=t[l].ny+jump_y[i];
			if(ans[xx][yy]==0&&xx>0&&xx<=n&&yy>0&&yy<=m&&vis[xx][yy]!=1){
				ans[xx][yy]=ans[t[l].nx][t[l].ny]+1; t[++r].nx=xx; t[r].ny=yy; 
				if(map[xx][yy]==2){
					pd++; if(pd==b) return;
				}
			}
		}
		l++;
	}
}
int main()
{
	cin>>n>>m>>a>>b;
	for(int i=1;i<=a;i++){
		cin>>vris_x[i]>>vris_y[i]; map[vris_x[i]][vris_y[i]]=1;
	}
	for(int i=1;i<=b;i++){
		cin>>king_x[i]>>king_y[i]; map[king_x[i]][king_y[i]]=2;
	}
	bfs();
	for(int i=1;i<=b;i++){
		if(map[king_x[i]][king_y[i]]==1){
			cout<<0<<endl;
		}else cout<<ans[king_x[i]][king_y[i]]<<endl;
		
	}
	return 0;
}
2022/3/2 21:21
加载中...