为什么TLE啊
查看原帖
为什么TLE啊
1211186
_KMnO4_楼主2024/3/11 20:06

样例全过了啊,大佬帮忙看下

#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;
}
2024/3/11 20:06
加载中...