只对了1,其他都WA
预处理每个格子什么时候之前是安全的,然后搜索里加入t记录时间
代码:
#include <bits/stdc++.h>
using namespace std;
int T,n,f[2000][2000],v[2000][2000],a,b;
bool flag;
int X[5] = {0,1,0,-1},Y[5] = {1,0,-1,0};
bool iscon(int a,int b)
{
if(a>=0&&a<n&&b>=0&&b<n)
{
return 1;
}
return 0;
}
void dfs(int x,int y,int t)
{
if(flag){return;}
if(v[x][y])
{
return ;
}
if(x == n-1 && y == n-1)
{
cout << "Yes" << endl;
flag = 1;
return ;
}
v[x][y]=1;
for(int i = 0;i < 4;i++)
{
if(iscon(x+X[i],y+Y[i])&&(f[x+X[i]][y+Y[i]]==0 || f[x+X[i]][y+Y[i]]>t))
{
dfs(x+X[i],y+Y[i],t+1);
}
}
}
int main()
{
cin >> T;
for(int kkk = 0;kkk < T;kkk++)
{
cin >> n;
for(int i = 0;i < 1500;i++)
{
for(int j = 0;j < 1500;j++)
{
f[i][j]=0;
v[i][j]=0;
}
}
for(int i = 0;i < 2*n-2;i++)
{
cin >> a >> b;
a--;
b--;
f[a][b] = i+1;
}
flag = 0;
dfs(0,0,0);
if(!flag)
{
cout << "No" << endl;
}
}
return 0;
}