70求助 #3#9#10
查看原帖
70求助 #3#9#10
846817
3olitudez楼主2023/4/4 14:33
#include<bits/stdc++.h>
#define N 5010
using namespace std;
int n, m, x0, t;
int x[10001][2], y[10001][2];
int dis[N][N];
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
struct node
{
	int a;
	int b;
};
queue<node>q;
bool check(int x, int y)
{
	if (x<1 || x>n)return false;
	if (y<1 || y>m)return false;
	if (dis[x][y] >= 0)return false;
	return true;
}
void bfs()
{
	while (!q.empty()) {
		int e = q.front().a;
		int f = q.front().b;
		q.pop();
		for (int i = 0; i < 4; i++)
		{
			int xx = e + dx[i];
			int yy = f + dy[i];
			if (check(xx, yy))
			{
				q.push(node{ xx,yy });
				dis[xx][yy] = dis[e][f] + 1;
			}
		}
	}
}
int main()
{
	scanf("%d%d%d%d", &n, &m, &x0, &t);
	memset(dis, -1, sizeof dis);
	for (int i = 1; i <= x0; i++)
	{
		scanf("%d%d", &x[i][0], &x[i][1]);
		dis[x[i][0]][x[i][1]] = 0;
		q.push(node{ x[i][0],x[i][1] });
	}
	for (int i = 1; i <= t; i++)
	{
		scanf("%d%d", &y[i][0], &y[i][1]);
	}
	bfs();
	for (int i = 1; i <= t; i++)
	{
		printf("%d\n", dis[y[i][0]][y[i][1]]);
	}
	return 0;
}
2023/4/4 14:33
加载中...