50分求调
查看原帖
50分求调
1064826
HeXingyao楼主2024/10/21 20:34
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,ans[505][505];
int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool vis[505][505];
queue<pair<int,int>>q;
inline bool check(int x,int y)
{
	if(x>n||x>m||x<1||y<1) return 0;
	if(vis[x][y]) return 0;
	return 1;
}
void bfs()
{
	while(q.size())
	{
		int x=q.front().first,y=q.front().second;
		q.pop();
		for(int i=0;i<4;i++)
		{
			int dx=x+d[i][0],dy=y+d[i][1];
			if(check(dx,dy))
			{
				q.push(make_pair(dx,dy));
				ans[dx][dy]=ans[x][y]+1;
				vis[dx][dy]=1;
			}
		}
		
	}
}
int main()
{
	scanf("%d%d%d%d",&n,&m,&a,&b);
	for(int i=1;i<=a;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		vis[x][y]=1;
		q.push(make_pair(x,y));
	}
	bfs();
	for(int i=1;i<=b;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		printf("%d\n",ans[x][y]);
	}
	return 0;
}
2024/10/21 20:34
加载中...