WA#35,求调!
查看原帖
WA#35,求调!
995895
__zyy_wgcs__楼主2024/10/6 15:58
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
int a[2010][2010];
bool vis[2010][2010];
char way[2010][2010];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct node{
	int x,y,step;
};
char aaa[4000010];
void out(){
	int i=0;
	int x=n,y=m;
	while(x!=1||y!=1){
		aaa[++i]=way[x][y];
		if(way[x][y]=='D'){
			x-=1;
		}
		else if(way[x][y]=='U'){
			x+=1;
		}
		else if(way[x][y]=='R'){
			y-=1;
		}
		else{
			y+=1;
		}
	}
	for(int j=1;j<=i;j++){
		printf("%c",aaa[j]);
	}
	printf("\n");
}
void bfs(){
	queue<node>q;
	q.push({1,1,0});
	vis[1][1]=1;
	while(!q.empty()){
		int x=q.front().x,y=q.front().y,step=q.front().step;
		q.pop();
		if(x==n&&y==m){
			printf("%d\n",step);
			out();
			return;
		}
		for(int i=0;i<4;i++){
			int nx=x+dx[i],ny=y+dy[i];
			if(nx<1||ny<1||nx>n||ny>m){
				continue;
			}
			if(a[nx][ny]==a[x][y]||vis[nx][ny]){
				continue;
			}
			q.push({nx,ny,step+1});
			vis[nx][ny]=1;
			if(i==0){
				way[nx][ny]='D';
			}
			else if(i==1){
				way[nx][ny]='U';
			}
			else if(i==2){
				way[nx][ny]='R';
			}
			else{
				way[nx][ny]='L';
			}
		}
	}
	printf("-1\n");
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				scanf("%1d",&a[i][j]);
			}
		}
		memset(vis,0,sizeof vis);
		bfs();
	}
	return 0;
}
2024/10/6 15:58
加载中...