通过排查发现bfs函数写错了,但是一直没有发现哪里细节出了问题,能过样例和第一个点,查了一早上了5555
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
int T, n;
int mp[1010][1010];
int t[1010][1010];
bool vis[1010][1010];
int qx[100100] = { 0 };
int qy[100100] = { 0 };
int dx[5] = { 1,-1,0,0,0 };
int dy[5] = { 0,0,1,-1,0 };
bool bfs()
{
qx[0] = 1;
qy[0] = 1;
t[1][1] = 0;
vis[1][1] = 1;
int l = 0, r = 0;
while (l <= r)
{
if (qx[l] == n && qy[l] == n)
return 1;
else
{
for (int i = 0; i < 5; i++)
{
int dxx=qx[l]+dx[i];
int dyy=qy[l]+dy[i];
if (dxx>= 1 && dxx<= n && dyy>= 1 && dyy <= n)
{
if ((!mp[dxx][dyy] || t[qx[l]][qy[l]] + 1 <= mp[dxx][dyy]) && vis[dxx][dyy] == 0)
{
r++;
qx[r] = dxx;
qy[r] = dyy;
t[dxx][dyy] = t[qx[l]][qy[l]] + 1;
vis[dxx][dyy] = 1;
}
}
}
}
l++;
}
return 0;
}
int main()
{
cin >> T;
while (T--)
{
cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
mp[i][j] = 0;
vis[i][j]= 0;
}
}
for (int i = 1; i <= 2 * n - 2; i++)
{
int x, y;
cin >> x >> y;
mp[x][y] = i;
}
/*
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cout << setw(10) << mp[i][j] << " ";
}
cout << endl;
}
*/
if (bfs())
{
cout << "Yes" << endl;
}
else if (!bfs())
{
cout << "No" << endl;
}
}
return 0;
}