WA求助,样例,自己编的数据都行,不知道错在哪
查看原帖
WA求助,样例,自己编的数据都行,不知道错在哪
1184863
CKRITO楼主2024/3/14 12:50
#include<bits/stdc++.h>
#include<string>
#define ll long long
#define N 2010
using namespace std;
const int INF=0x3f3f3f3f;
int lok[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct node{int x,y;};
//string s[N][N];// ·Å·¾¶ 
char a[N][N];
string str[4]={"R","D","L","U"};
queue<node>q;  // ¶ÓÁÐ 
int vis[N][N]; // 񈬀 
map<int,int> mp;// ¼Æ²½Êý 
map<int,string> pre;
int bfs(int n,int m){
	mp[11]=0;
	node s1;
	s1.x=1;
	s1.y=1;
	vis[1][1]=1;
	q.push(s1);
	while(!q.empty()){
		node t=q.front();
		q.pop();
		if(t.x==n&&t.y==m){
			return mp[n*10+m];
		}
		int x=t.x;
		int y=t.y;
		for(int i=0;i<=3;i++){
			int nx=x+lok[i][0];
			int ny=y+lok[i][1];
			if(nx<1||nx>n||ny<1||ny>m)continue;
			if(a[x][y]==a[nx][ny]||vis[nx][ny])continue;
			vis[nx][ny]=1;
			node next;
			next.x=nx;
			next.y=ny;
			q.push(next);
			//pre[nx][ny]=t;
			//cout<<x<<" "<<y<<" "<<"new"<<s[x][y]<<endl;
			//cout<<nx<<" "<<ny<<" "<<i<<s[nx][ny]<<endl;
			mp[nx*10+ny]=mp[x*10+y]+1;
			pre[nx*10+ny]=pre[x*10+y]+str[i];
			//cout<<111<<endl;
		}
		
	}
	return -1;
}
int main(){
	int t;
	cin>>t;
	for(int i=1;i<=t;i++){
		int n,m;
		cin>>n>>m;
		memset(vis,0,sizeof(vis));
		for(int k=1;k<=n;k++){
			for(int j=1;j<=m;j++){
				cin>>a[k][j];
			}
		}
		int x=bfs(n,m);
		cout<<x<<endl;
		if(x!=-1){
			cout<<pre[n*10+m]<<endl;
		}
		
	}
    return 0;
}
/*
2
4 3
101
010
111
010
6 5
10101
11111
01101
01111
01101
01010
1
3 3
011
101
111
*/
2024/3/14 12:50
加载中...