HELP
查看原帖
HELP
1306142
Eddy1341楼主2024/5/23 13:38
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=505;
int n,m,a,b,dx[]={-1,0,1,0},dy[]={0,1,0,-1},vis[maxn][maxn],tmpx,tmpy;
vector<int> v1,v2;
struct node{
	int x,y,step;
}; 
void in(){
    cin>>tmpx>>tmpy;
    tmpx--,tmpy--;
}
void bfs(vector<int>_x,vector<int>_y){
	queue<node>q;//用于存放要扩张的格子下标 
    for(int i=0;i<_x.size();i++){
        q.push(node{_x[i],_y[i],0}),
    	vis[_x[i]][_y[i]]=0;
    }
    while(q.size()){//搜索至没有可扩张的格子(队列为空) 
		node tmp=q.front();//当前格子 
		q.pop();
		for(int i=0;i<4;i++){
			int tx=tmp.x+dx[i],ty=tmp.y+dy[i];//当前格子坐标 
			if(tx<0||tx>=n||ty<0||ty>=m||vis[tx][ty]+1)continue;
			vis[tx][ty]=tmp.step;
			q.push(node{tx,ty,tmp.step+1});
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);//关闭同步流

    memset(vis,-1,sizeof(vis));
	cin>>n>>m>>a>>b;
    for(int i=0;i<a;i++){
        in();
        v1.push_back(tmpx);
        v2.push_back(tmpy);
    }
    bfs(v1,v2);
    for(int i=0;i<b;i++){
        in();
        cout<<vis[tmpx][tmpy]<<endl;
    }
	return 0;
}
2024/5/23 13:38
加载中...