WA#16,BFS求调
查看原帖
WA#16,BFS求调
1189662
hujianyue_i楼主2024/3/18 18:27
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b,nx,ny,ans[2002][2002],dx[5]={0,0,0,-1,1},dy[5]={0,1,-1,0,0};
long long T,n,m;
int p[2002][2002];
string s;
char st[500000],mp[2002][2002];
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){
					while(!q.empty()){
						q.pop();
					}
					return;
				}
			}
		}
		q.pop();
	}
	return;
}

int main (){
	cin>>T;
	for (int i=1;i<=T;i++){
		cin>>n>>m;
		/*
		for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++)
		{
			char ch = getchar();
			while (ch != '0' && ch != '1') ch = getchar();
			mp[i][j] = ch - '0';
			p[i][j] = 0;
			ans[i][j] = 0;
		}*/
		
		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;
				ans[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];
				st[j]=0;
			}
			cout<<endl;
		}
	}
	return 0;
}
2024/3/18 18:27
加载中...