http://tjuacm.chaosheng.top/problem.php?id=1287
https://www.luogu.com.cn/problem/P3395
思路参考:https://blog.csdn.net/qq_44793348/article/details/109682032
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int INF = 5000;
const int N = 1010;
int n;
int matrix[N][N];
bool vis[N][N];
int dx[4] = {0,0,-1,1};
int dy[4] = {1,-1,0,0};
struct pos{
int x, y;
int time;
};
int bfs(){
memset(vis, false, sizeof(vis));
queue<pos> q;
pos f;
f.x = 1;
f.y = 1;
f.time = 0;
q.push(f);
vis[f.x][f.y] = true;
while(!q.empty()){
f = q.front();
q.pop();
//满足条件
if(f.x == n && f.y == n){
return true;
}
for(int i = 0; i < 4; i++){
pos v = f;
v.x = f.x + dx[i];
v.y = f.y + dy[i];
//printf("v x = %d vy = %d\n", v.x, v.y);
if(v.x > 0 && v.x <= n && v.y > 0 && v.y <= n && !vis[v.x][v.y] && matrix[v.x][v.y] >= f.time + 1){
vis[v.x][v.y] = true;
v.time += 1;
//printf("v.time = %d\n");
q.push(v);
}
}
}
return false;
}
int main(){
int t;
cin >> t;
while(t--){
cin >> n;
int x, y;
memset(matrix, 0x7f, sizeof(matrix));
for(int i = 1; i < 2 * n - 1; i++){
cin >> x >> y;
matrix[x][y] = i;
}
if(bfs()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
京公网安备 11010502036488号