WA#1,求调,BFS
查看原帖
WA#1,求调,BFS
1189662
hujianyue_i楼主2024/3/17 23:34
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b,nx,ny,ans[10000][10000],mp[2002][2002],dx[5]={0,0,0,-1,1},dy[5]={0,1,-1,0,0};
long long T,n,m;
int p[2000][2000];
string s;
char st[1000000];
queue < pair<int,int> > q;

void bfs(int x,int y){
	p[x][y]=1;
	q.push({x,y});
	while(!q.empty()){
		auto t=q.front();
		for (int i=1;i<=4;i++){
			nx=t.first+dx[i];
			ny=t.second+dy[i];
			if(nx>=1 && nx<=n && ny>=1 && ny<=m && p[nx][ny]==0 && mp[nx][ny]!=mp[t.first][t.second]){
				q.push({nx,ny});
				ans[nx][ny]=ans[t.first][t.second]+1;
				p[nx][ny]=i;
			}
			if(nx==n && ny==m && mp[nx][ny]!=mp[t.first][t.second]){
				return;
			}
		}
		
		q.pop();
	}
	return;
}

int main (){
	cin>>T;
	for (int i=1;i<=T;i++){
		cin>>n>>m;
		for (int j=1;j<=n;j++){
			cin>>s;
			for (int k=1;k<=m;k++){
				mp[j][k]=int(s[k-1])-48;
				p[j][k]=0;
			}
		}
		bfs(1,1);
		if(ans[n][m]==0){
			cout<<-1<<endl;
		}
		else{
			a=n;
			b=m;
			cout<<ans[n][m]<<endl;
			for (int j=ans[n][m];j>=1;j--){
				if(p[a][b]==1){
					st[j]='R';
					b--;
				}
				else if(p[a][b]==2){
					st[j]='L';
					b++;
				}
				else if(p[a][b]==3){
					st[j]='U';
					a++;
				}
				else if(p[a][b]==4){
					st[j]='D';
					a--;
				}
			}
			for (int j=1;j<=ans[n][m];j++){
				cout<<st[j];
			}
			cout<<endl;
		}
		
	}
	return 0;
}
2024/3/17 23:34
加载中...