样例全过了啊,大佬帮忙看下
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 2e3 + 10, dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1};
queue<int> qx, qy;
bool vis[maxn][maxn];
char str[maxn][maxn], last[maxn][maxn];
int T, n, m, nx, ny, ux, uy, dis[maxn][maxn];
void print(int x, int y) {
if (last[x][y] == 'N') return ;
if (last[x][y] == 'R') print(x, y - 1);
if (last[x][y] == 'L') print(x, y + 1);
if (last[x][y] == 'U') print(x + 1, y);
if (last[x][y] == 'D') print(x - 1, y);
printf("%c", last[x][y]);
return ;
}
void Bfs(int sx, int sy) {
memset(dis, -1, sizeof(dis));
memset(vis, false, sizeof(vis));
qx.push(sx), qy.push(sy);
dis[sx][sy] = 0;
vis[sx][sy] = true;
last[sx][sy] = 'N';
while (qx.size()) {
ux = qx.front();
uy = qy.front();
qx.pop(), qy.pop();
for (int i = 1; i <= 4; i++) {
nx = ux + dx[i - 1];
ny = uy + dy[i - 1];
if (nx < 1 || nx > n || ny < 1 || ny > m || vis[nx][ny] || str[nx][ny] == str[ux][uy]) continue;
vis[nx][ny] = true;
dis[nx][ny] = dis[ux][uy] + 1;
if (i == 1) last[nx][ny] = 'R';
if (i == 2) last[nx][ny] = 'L';
if (i == 3) last[nx][ny] = 'U';
if (i == 4) last[nx][ny] = 'D';
qx.push(nx);
qy.push(ny);
}
}
return ;
}
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) scanf(" %s", str + i);
Bfs(1, 1);
if (~dis[n][m]) {
printf("%d\n", dis[n][m]);
print(n, m);
putchar(10);
} else puts("-1");
}
return 0;
}