为什么会TLE
查看原帖
为什么会TLE
685398
ssine233楼主2024/3/11 23:33
#include <bits/stdc++.h>
using namespace std;
long long t, n, m, 
	      dx[4] = {-1, 1, 0, 0},
		  dy[4] = {0, 0, -1, 1};	
char c[2010][2010], ans[2010][2010];
struct s{
	long long x, y, z;
};
queue<s> q;

void print() {
	string o;
	for(long long i=n, j=m; !(i==1&&j==1); ) {
		o += ans[i][j];
		if(ans[i][j]=='U')	i++;
		if(ans[i][j]=='D')  i--;
		if(ans[i][j]=='L')  j++;
		if(ans[i][j]=='R')  j--;
	}
	long long u = o.size();
	for(int i=u-1; i>=0; i--)	printf("%c", o[i]);
	printf("\n");
}

void bfs() {
	q.push((s){1, 1, 0});
	while(!q.empty()) {
		s f = q.front();
		q.pop();
		for(long long i=0; i<4; i++) {
			long long ox = f.x + dx[i], oy = f.y + dy[i];
			if(ox>=1 && ox<=n && oy>=1 && oy<=m && c[f.x][f.y]!=c[ox][oy] && ans[ox][oy]==char(0)) {
				if(i==0) 	ans[ox][oy] = 'U';
				if(i==1)    ans[ox][oy] = 'D';
				if(i==2)    ans[ox][oy] = 'L';
				if(i==3)	ans[ox][oy] = 'R';
				if(ox==n && oy==m) {
					printf("%lld\n", f.z+1);
					print();
					return ;
				}
				q.push((s){ox, oy, f.z+1});
			}
		}
	}
}

int main() {
	scanf("%lld", &t);
	while(t--) {
		scanf("%lld%lld", &n, &m);
		getchar();
		for(long long i=1; i<=n; i++) {
			for(long long j=1; j<=m; j++) 
				scanf("%c", &c[i][j]);
			getchar();
		}
		bfs();
		if(ans[n][m]==char(0)) 	printf("-1\n");
		for(long long i=1; i<=n; i++)
			for(long long j=1; j<=m; j++) 
				ans[i][j] = char(0);  	
	}
	return 0;
}

样例能过,但是 #1 TLE。

2024/3/11 23:33
加载中...