Wa求助
查看原帖
Wa求助
789564
queenbee楼主2024/3/13 17:46
#include<bits/stdc++.h>
using namespace std;
const int N=2e3+10;
const int M=1e9;
int t;
int n,m;
char c;
int f[N][N];
int vis[N][N],st[N][N];
int v[N][N];
int dx[5]={0,-1,1,0,0};
int dy[5]={0,0,0,-1,1};
int dz[5]={0,2,1,4,3};
int ans[N];
char ch[5]={0,'U','D','L','R'};
void bfs(int x,int y){
	for(int i=1;i<=4;i++){
		if(f[x+dx[i]][y+dy[i]]==1-f[x][y]&&x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m&&v[x+dx[i]][y+dy[i]]<=1){
			if(st[x+dx[i]][y+dy[i]]>st[x][y]+1){
				st[x+dx[i]][y+dy[i]]=st[x][y]+1;
				vis[x+dx[i]][y+dy[i]]=i;
				bfs(x+dx[i],y+dy[i]);
				v[x+dx[i]][y+dy[i]]+=1;
			}
		}
	}
}
void print(int x,int y,int s){
	if(s<=0){
		return;
	}
	ans[s]=vis[x][y];
	vis[x][y]=dz[vis[x][y]];
	print(x+dx[vis[x][y]],y+dy[vis[x][y]],s-1);
}
/*void solve(int x,int y,int s){
	//cout<<x<<" "<<y<<endl;
	vis[x][y]=1;
	if(x==n&&y==m){
		if(s<st){
			st=s;
			for(int i=1;i<=s;i++){
				a[i]=b[i];
			}
		}
		return;
	}
	for(int i=1;i<=4;i++){
		if(vis[x+dx[i]][y+dy[i]]==0&&f[x+dx[i]][y+dy[i]]==1-f[x][y]&&x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m){
			vis[x+dx[i]][y+dy[i]]=1;
			b[s+1]=i;
			solve(x+dx[i],y+dy[i],s+1);
			vis[x+dx[i]][y+dy[i]]=0;
		}
	}
	return;
}
*/
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				st[i][j]=M;
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				v[i][j]=0;
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>c;
				f[i][j]=c-'0';
			}
		} 
		st[1][1]=0;
		bfs(1,1);
	/*	for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<ch[vis[i][j]];
			}
			cout<<endl;
		}
	*/
		if(st[n][m]>=M){
			st[n][m]=-1;
		}
		cout<<st[n][m]<<endl;
		print(n,m,st[n][m]);
		for(int i=1;i<=st[n][m];i++){
			cout<<ch[ans[i]];
		}
		if(st[n][m]!=-1){
			cout<<endl;
		}
	}
	return 0;
}
2024/3/13 17:46
加载中...