好好好,一个黄给我吃27个发时
查看原帖
好好好,一个黄给我吃27个发时
540363
AKPC楼主2024/3/10 22:59
#include <bits/stdc++.h>
using namespace std;
#define mpr make_pair
#define fr first
#define sc second
const int N=2005,dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};//上右下左 
int n,m,a[N][N];
pair<int,int>lst[N][N];
bitset<N>tmp[N];
void solve(){
	cin>>n>>m;
	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			char ch;
			cin>>ch;
			a[i][j]=(ch=='1');
			lst[i][j]=mpr(0,0);
			tmp[i][j]=0;
		}
	}
	queue<pair<int,int> >q;
	q.push(mpr(1,1));
	string res="";
	tmp[1][1]=1;
	bool nmsl=0;
	while (!q.empty()){
		int x=q.front().fr,y=q.front().sc;
		q.pop();
//		cout<<x<<' '<<y<<' '<<ans<<'\n';
		if (nmsl||(x==n&&y==m)){
			break;
		}
		for (int i=0;i<4;i++){
			int cx=x+dx[i],cy=y+dy[i];
//			cout<<"c: "<<cx<<' '<<cy<<'\n';
			if (cx<1||cy<1||cx>n||cy>m) continue;
			if (tmp[cx][cy]||(a[x][y]+a[cx][cy])!=1) continue;
			q.push(mpr(cx,cy));
			if (cx==n&&cy==m) nmsl=1;
			lst[cx][cy]=mpr(x,y);
			tmp[cx][cy]=1;
		}
	}
	if (lst[n][m].fr==0&&lst[n][m].sc==0) cout<<"-1\n";
	else{
		string s="";
		int x=n,y=m;
		while (x!=1||y!=1){
			int lx=lst[x][y].fr,ly=lst[x][y].sc;
			if (x-lx==1) s='D'+s;
			if (x-lx==-1) s='U'+s;
			if (y-ly==1) s='R'+s;
			if (y-ly==-1) s='L'+s;
			x=lx,y=ly;
		}
		cout<<s.size()<<'\n'<<s<<'\n';
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int T;
	cin>>T;
	while (T--){
		solve();
	}
	return 0;
}

TLE#16 1关赏

2024/3/10 22:59
加载中...