TLE求优化
查看原帖
TLE求优化
845230
herzFan楼主2024/6/3 21:12
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int x;
	int y;
	string s;
	int b;
};
int vis[2001][2001];
vector<string> a;
int main()
{
	int t;
	scanf("%d", &t);
	for (int i=1;i<=t;i++)
	{
		memset(vis, 0, sizeof(vis));
		a.clear();
		int n, m;
		scanf("%d %d", &n, &m);
		a.push_back("");
		for (int j=1;j<=n;j++)
		{
			string aa;
			aa.resize(m);
			scanf("%s", &aa[0]);
			a.push_back(aa);
		}
		queue<node> q;
		node z={1, 1, "", 0};
		q.push(z);
		while (!q.empty())
		{
			node head=q.front();
			q.pop();
			int x=head.x;
			int y=head.y;
			int b=head.b;
			string s=head.s;
			//cout<<x<<','<<y<<':'<<b<<endl;
			vis[x][y]=1;
			if (x==n&&y==m)
			{
				printf("%d\n%s\n", b, s.c_str());
				q.push({0, 0, "", 0});
				break;
			}
			if (x<n&&vis[x+1][y]==0&&a[x+1][y-1]!=a[x][y-1])
			{
				node p={x+1, y, s+"D", b+1};
				q.push(p);
			}
			if (x>1&&vis[x-1][y]==0&&a[x-1][y-1]!=a[x][y-1])
			{
				node p={x-1, y, s+"U", b+1};
				q.push(p);
			}
			if (y<m&&vis[x][y+1]==0&&a[x][y+1-1]!=a[x][y-1])
			{
				node p={x, y+1, s+"R", b+1};
				q.push(p);
			}
			if (y>1&&vis[x][y-1]==0&&a[x][y-1-1]!=a[x][y-1])
			{
				node p={x, y-1, s+"L", b+1};
				q.push(p);
			}
		}
		if (q.empty())
		{
			printf("-1\n");
		}
	}
	return 0;
}
2024/6/3 21:12
加载中...