WA on #3
查看原帖
WA on #3
735763
_ChongYun_楼主2024/3/10 13:32
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,m;
char c[4111][4111];
struct node{
	int to,nxt;
}w[20000005];
int h[20000005],cnt=0;
int lst[4000005];
int id(int x,int y){ return (x-1)*m+y; }
int iidx(int xx){ return xx%m==0?xx/m:xx/m+1; }
int iidy(int xx){ return xx-(iidx(xx)-1)*m; }
char f(int xx,int yy,int x,int y){
	if(xx==x-1&&yy==y) return 'U';
	if(xx==x+1&&yy==y) return 'D';
	if(xx==x&&yy==y-1) return 'L';
	if(xx==x&&yy==y+1) return 'R';
	return 'A';
}
void Link(int x,int y){
	++cnt;
	w[cnt].to=y;
	w[cnt].nxt=h[x];
	h[x]=cnt;
	return ;
}
int dis[1000005];
bool vis[1000005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void dijkstra(int st){
	for(int i=1;i<=n*m;i++) dis[i]=LLONG_MAX;
	memset(vis,false,sizeof(vis));
	dis[st]=0;
	q.push(make_pair(0,st));
	while(!q.empty()){
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x]=true;
		for(int i=h[x];i!=0;i=w[i].nxt){
			int y=w[i].to;
			if(dis[y]>dis[x]+1){
				dis[y]=dis[x]+1;
				lst[y]=x;
				if(!vis[y]) q.push(make_pair(dis[y],y)); 
			}
		}
	} 
	return ;
}
signed main(){
	cin>>t;
	while(t--){
		string str="";
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>c[i][j];
			}
		}
		cnt=0;
		for(int i=1;i<=n*m;i++) lst[i]=0;
		for(int i=1;i<=n*m;i++) w[i]=(node){0,0};
		for(int i=1;i<=n*m;i++) h[i]=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(i!=1&&c[i-1][j]!=c[i][j]) Link(id(i,j),id(i-1,j));
				if(i!=n&&c[i+1][j]!=c[i][j]) Link(id(i,j),id(i+1,j));
				if(j!=1&&c[i][j-1]!=c[i][j]) Link(id(i,j),id(i,j-1));
				if(j!=m&&c[i][j+1]!=c[i][j]) Link(id(i,j),id(i,j+1));
			}
		}
		dijkstra(1);
		if(dis[id(n,m)]==LLONG_MAX){
			printf("-1\n");
			continue;
		}
		cout<<dis[id(n,m)]<<endl;
		int k=id(n,m);
		int uu=dis[id(n,m)];
		while(uu--){
			int ux=iidx(k),uy=iidy(k);
			k=lst[k];
			int vx=iidx(k),vy=iidy(k);
			str=f(ux,uy,vx,vy)+str;
		}
		cout<<str<<endl;
	}
	return 0;
}
2024/3/10 13:32
加载中...