20求助
  • 板块P3395 路障
  • 楼主_KMnO4_
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/6 17:06
  • 上次更新2023/12/6 20:07:08
查看原帖
20求助
1211186
_KMnO4_楼主2023/12/6 17:06

样例已过

#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 1e3 + 10, ux[5] = {0, 0, 0, 1, -1}, uy[5] = {0, 1, -1};
bool vis[maxn][maxn];
int T, n, nx, ny, tmpx, tmpy, x[maxn], y[maxn]; 
bool bfs(int sx, int sy) {
	queue<int> qx, qy;
	qx.push(sx), qy.push(sy);
	for (int j = 1; qx.size(); j++) {
		tmpx = qx.front();
		tmpy = qy.front();
		qx.pop(), qy.pop();
		if (tmpx ^ n || tmpy ^ n) {
			for (int i = 1; i <= 4; i++) {
				nx = tmpx + ux[i];
				ny = tmpy + uy[i];
				if (nx < 1 || nx > n || ny < 1 || ny > n || vis[nx][ny]) continue;
				vis[nx][ny] = true;
				qx.push(nx), qy.push(ny);
			}
		} else return true;
		if (j > n) continue; 
		nx = x[j];
		ny = y[j];
		vis[nx][ny] = true;
	}
	return false;
}
int main() {
	scanf("%d", &T);
	while (T--) {
		scanf("%d", &n);
		memset(vis, false, sizeof(vis));
		memset(x, false, sizeof(x));
		memset(y, false, sizeof(y));
		for (int i = 1; i <= n; i++) scanf("%d %d", x + i, y + i);
		puts(bfs(1, 1) ? "Yes" : "No");
	}
	return 0;
}
2023/12/6 17:06
加载中...