闻灌多
  • 板块灌水区
  • 楼主luoxiaoran72
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/21 19:32
  • 上次更新2025/1/21 21:45:38
查看原帖
闻灌多
1027265
luoxiaoran72楼主2025/1/21 19:32

零分求条,样例过了

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int man=1145*2,kd[][2]= {1,0,-1,0,0,1,0,-1};
int T,n,m,x,y,a[man][man],lst[man*man][2],len,dis[man][man],pre[man][man][2];
void print (int x,int y) {
	if(x==1 && y==1) return;
	int pre_x=pre[x][y][0],pre_y=pre[x][y][1];
	print(pre_x,pre_y);
	if(pre_x-1==x)cout<<'U';
	if(pre_x+1==x)cout<<'D';
	if(pre_y-1==y)cout<<'L';
	if(pre_y+1==y)cout<<'R';
    //if(!pre[n][m][0] && !pre[n][m][1])return ;
    //print(pre[n][m][0],pre[n][m][1]);
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>T;
	while(T--) {
		cin>>n>>m;//多测不清空,爆零两行泪
		x=y=1;
		fill(dis[0],dis[max(n,m)+10],0);
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=m; j++) {
				char c;
				cin>>c;
				a[i][j]= (c=='1');
			}
		}
		lst[len=1][0]=lst[len][1]=dis[1][1]=1;
		for(int i=1; i<=len; i++) {
			int xxs=lst[i][0],wyy=lst[i][1];
			for(int j=0; j<=3; j++) {
				int dx=xxs+kd[j][0],dy=wyy+kd[j][1];
				if(dx>=1 && dy<=n && dy>=1 && dy<=m && a[xxs][wyy]!=a[dx][dy] && dis[dx][dy]==0) {
					lst[++len][0]=dx,lst[len][1]=dy;
					dis[dx][dy]=dis[xxs][wyy]+1;
					pre[dx][dy][0]=xxs;
					pre[dx][dy][1]=wyy;
				}
			}
		}
		if(!dis[n][m])cout<<-1<<endl;
		else {
			cout<<dis[n][m]-1<<endl;
			print(n,m);
			cout<<endl;
		}
	}
	return 0;
}
2025/1/21 19:32
加载中...