BFS写错了,但是查不出来哪里细节错了,20分求救www
  • 板块P3395 路障
  • 楼主acahv
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/2/16 11:37
  • 上次更新2023/10/28 08:24:50
查看原帖
BFS写错了,但是查不出来哪里细节错了,20分求救www
557887
acahv楼主2022/2/16 11:37

通过排查发现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;
}
2022/2/16 11:37
加载中...