wa on 3,感觉思路没问题,代码短(我寻思是吧
查看原帖
wa on 3,感觉思路没问题,代码短(我寻思是吧
979656
Sgt_Dante楼主2024/3/16 09:48
#include <bits/stdc++.h>

using namespace std;

namespace myspace{
	#define ll long long
	#define pii pair<int,int>
	#define endl "\n"
	#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
	#define debug(x) cout<<#x<<"="<<x<<endl
	#define x first
	#define y second
	const int MAXN=2005;
	const int INT_INF=2147483647;
	const int INF=0x3f3f3f3f;
}

using namespace myspace;

int n,m;
bool maps[MAXN][MAXN];
int dp[MAXN][MAXN];
string way[MAXN][MAXN];
bool book[MAXN][MAXN];

int dfs(int x,int y){
	if(dp[x][y]!=INF) return dp[x][y];
	else if(!book[x][y]) {
		book[x][y]=1;
		if(y<m&&maps[x][y]!=maps[x][y+1]) if(dfs(x,y+1)+1<dp[x][y]) dp[x][y]=dfs(x,y+1)+1,way[x][y]='R'+way[x][y+1];
		if(y>1&&maps[x][y]!=maps[x][y-1]) if(dfs(x,y-1)+1<dp[x][y]) dp[x][y]=dfs(x,y-1)+1,way[x][y]='L'+way[x][y-1];
		if(x<n&&maps[x][y]!=maps[x+1][y]) if(dfs(x+1,y)+1<dp[x][y]) dp[x][y]=dfs(x+1,y)+1,way[x][y]='D'+way[x+1][y];
		if(x>1&&maps[x][y]!=maps[x-1][y]) if(dfs(x-1,y)+1<dp[x][y]) dp[x][y]=dfs(x-1,y)+1,way[x][y]='U'+way[x-1][y];
		
		return dp[x][y];
	}
	return INF;
}

int main(){
	int t;
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				char c;
				cin>>c;
				if(c=='0') maps[i][j]=0;
				else maps[i][j]=1;
				way[i][j]="";
				book[i][j]=0;
				dp[i][j]=INF;
			}
		}
		dp[n][m]=0;
		dfs(1,1);
		if(dp[1][1]==INF){
			cout<<-1<<endl;
		}
		else{
			cout<<dp[1][1]<<endl;
			cout<<way[1][1]<<endl;
		}
		
	}
	
	return 0;
}
2024/3/16 09:48
加载中...