60分TLE求助,感觉复杂度也不是很高为什么会TLE,求各位大佬帮忙看看。
查看原帖
60分TLE求助,感觉复杂度也不是很高为什么会TLE,求各位大佬帮忙看看。
874676
silentzdw楼主2023/8/3 09:00
#include <bits/stdc++.h>
using namespace std;
const int N = 550;
int g[N][N];
typedef pair<int, int>PII;
int q[N];
int n, m, a, b;
int d[N][N];
pair<int, int>ai[100050];
pair<int, int>bi[100050];
bool st[N][N];

void bfs(pair<int, int>h) {
	memset(st, 0, sizeof(st));
	queue<PII>q;
	d[h.first][h.second] = 0;
	st[h.first][h.second] = 1;
	q.push({h.first, h.second});
	int dx[4] = {-1, 0, 0, 1};
	int dy[4] = {0, -1, 1, 0};
	while (q.size()) {
		auto t = q.front();
		q.pop();
		for (int i = 0; i < 4; i++) {
			int x = t.first + dx[i];
			int y = t.second + dy[i];
			if (x >= 1 && x <= n && y >= 1 && y <= n && !st[x][y]) {
				d[x][y] = min(d[x][y], d[t.first][t.second] + 1);
				q.push({x, y});
				st[x][y] = 1;
			}
		}
	}

}

int main() {
	memset(d, 600, sizeof(d));
	cin >> n >> m >> a >> b;
	for (int i = 1; i <= a; i++) {
		int x, y;
		cin >> x >> y;
		ai[i] = make_pair(x, y);
	}
	for (int i = 1; i <= b; i++) {
		int x, y;
		cin >> x >> y;
		bi[i] = make_pair(x, y);
	}
	for (int i = 1; i <= a; i++) {
		bfs(ai[i]);
	}
	for (int i = 1; i <= b; i++) {
		cout << d[bi[i].first][bi[i].second] << "\n";
	}
	return 0;
}
2023/8/3 09:00
加载中...