bfs超时0求助
查看原帖
bfs超时0求助
1168486
DomiSun楼主2024/12/8 16:57
#include <bits/stdc++.h>
using namespace std;
const int N = 2001, xd[][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int T;
int n,m;
int a[N][N];
int d[N][N];
int l[N][2],p[N][N];
int t;
int main()
{
	cin >> T;
	while(T--)
	{
		cin >> n >> m;
		for(int i = n;i >= 1;i--)
		{
			for(int j = m;j >= 1;j--)
			{
				char c;
				cin >> c;
				a[i][j] = c == '1';
			}
		}
		fill(d[1],d[n+1],-1);
		l[t = 1][0] = l[1][1] = 1,d[1][1] = 0;
		for(int i = 1;i <= n;i++)
		{
			for(int j = 0;j < 4;j++)
			{
				int x = l[i][0] + xd[j][0],y = l[i][1] + xd[j][1];
				if(x >= 1 && x <= n && y >= 1 && y <= m && d[x][y] == -1 && a[l[i][0]][l[i][1]] != a[x][y])
				{
					d[x][y] = d[l[i][0]][l[i][1]] + 1;
					p[x][y] = j;
					++t, l[t][0] = x, l[t][1] = y;
				}
			}
		}
		if(d[n][m] == -1)
		{
			cout << "-1\n";
		}
		else
		{
			cout << d[n][m] << "\n";
			for(int i = n,j = m,o;i != 1 || j != 1;i -= xd[o][0],j -= xd[o][1])
			{
				o = p[i][j];
				cout << "DURL"[o]; 
			}
			cout << "\n";
		}
	}
	return 0;
}
2024/12/8 16:57
加载中...