RT,bfs 已过,打了一遍 dfs 发现 RE 了,不知道是什么原因,求助。
#include <bits/stdc++.h>
using namespace std;
int t, n, pd, px[2010], py[2010], a[1007][1007], vis[1007][1007];
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
void dfs(int k, int x, int y){
vis[x][y] = 1;
if (x == n && y == n) pd = 1;
if (k >= 1) a[px[k]][py[k]] = 1;
for (int i=0; i<4; i++){
int fx = x + dx[i], fy = y + dy[i];
if (fx <= 0 || fy <= 0 || fx > n || fy > n) continue;
if (a[fx][fy] || vis[fx][fy]) continue;
dfs(k+1, fx, fy);
}
}
int main(){
scanf ("%d", &t);
while (t --){
pd = 0;
memset(a, 0, sizeof(a));
memset(vis, 0, sizeof(vis));
scanf ("%d", &n);
for (int i=1; i<=(n<<1)-2; i++){
scanf ("%d%d", &px[i], &py[i]);
}
dfs(0, 1, 1);
printf ("%s\n", pd == 1 ? "Yes" : "No");
}
return 0;
}