求助,样例过了#3WA
查看原帖
求助,样例过了#3WA
977431
maoyuqi楼主2024/3/10 09:54
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3+10;
int g[N][N];
int n,m;
int T;
int d[N][N];
char pre[N][N];
pair<int,int> p[N][N];
int dx[]={0,1,-1,0};
int dy[]={1,0,0,-1};
char a[]={'R','D','U','L'};
void bfs()
{
	for(int i = 0;i<=n+1;i++)
	{
		for(int j = 0;j<=m+1;j++)
		{
			d[i][j]=-1;
		}
	}
	d[1][1]=0;
	p[1][1]={-1,-1};
	pre[1][1]='p';
	queue<pair<int,int>> q;
	q.push({1,1});
	while(q.size())
	{
		auto t = q.front();
		q.pop();
		int x = t.first,y = t.second;
		for(int i = 0;i<3;i++)
		{
			int xx = dx[i]+x,yy = y+dy[i];
			if(d[xx][yy]==-1&&g[xx][yy]==(g[x][y]==1 ? 0 : 1)&&xx&&yy&&xx<=n&&yy<=m)
			{
				d[xx][yy]=d[x][y]+1;
				pre[xx][yy]=a[i];
				p[xx][yy]={x,y};
				q.push({xx,yy});
			}
		}
	}
}
int main()
{
	cin>>T;
	while(T--)
	{
		cin>>n>>m;
		getchar();
		for(int i = 1;i<=n;i++)
		{
			for(int j = 1;j<=m;j++)
			{
				char a;
				a = getchar();
				g[i][j] = a-'0';
			}
			getchar();
		}
		bfs();
		if(d[n][m]==-1)
		{
			cout<<-1<<endl;
		}
		else{
			cout<<d[n][m]<<endl;
			int i,j;
			i = n,j = m;
			string ans="";
			while(pre[i][j]!='p')
			{
				ans+=pre[i][j];
				int x = p[i][j].first,y = p[i][j].second;
				i = x,j = y;
			}
			for(int i=ans.size()-1;i>=0;i--) cout<<ans[i];
			cout<<endl;
		}
	}
	return 0;
}
2024/3/10 09:54
加载中...