QWQ! 60分,四个TLE,大神求调!救救孩子吧
查看原帖
QWQ! 60分,四个TLE,大神求调!救救孩子吧
751582
A3_141592a楼主2023/9/3 19:34
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;

int n,m,a,b,x,y,map[505][505];

int dx[4] = {0,0,-1,1};
int dy[4] = {-1,1,0,0};
int ans = 0;

struct node
{
	int x,y;
};

int dis[505][505];

int bfs(int x,int y)
{
	queue <node> q;
	memset(dis, -1, sizeof dis);
	q.push({x,y});
	dis[x][y] = 0;
	while(q.size())
	{
		node t = q.front();
		q.pop();
		if(map[t.x][t.y]) return dis[t.x][t.y];
		for(int i = 0; i <= 3; i++)
		{
			int nx = t.x + dx[i],ny = t.y + dy[i];
			if(nx < 1 || nx > n || ny < 1 || ny > m) continue;
			if(dis[nx][ny] != -1) continue;
			q.push({nx,ny});
			dis[nx][ny] = dis[t.x][t.y] + 1;
		}
	}
}

int main()
{
	cin >> n >> m >> a >> b;
	for(int i = 1; i <= a; i++)
	{
		cin >> x >> y;
		map[x][y] = 1;
	}
	for(int i = 1; i <= b; i++)
	{
		cin >> x >> y;
		cout << bfs(x,y) << endl;
	}
	return 0;
}
2023/9/3 19:34
加载中...