1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| #include<bits/stdc++.h> using namespace std; struct ss { int x1,y1; int x2,y2; int num; string s1; ss(int a1=0,int a2=0,int a3=0,int a4=0,int a5=0,string a7="\0"){x1=a1;y1=a2;x2=a3;y2=a4;num=a5;s1=a7;} inline void out(){printf("%d %d %d %d %d ",x1,y1,x2,y2,num);cout<<s1<<endl;} }ans; queue<ss> Q; char ch1[25][25],ch2[25][25],ch3[5]={'D','L','R','U'}; int a[22][22][22][22]; int fx1[5]={1,0,0,-1},fy1[5]={0,-1,1,0}; int fx2[5]={1,0,0,-1},fy2[5]={0,1,-1,0}; inline bool check1(int xx,int yy){return (xx>0&&xx<=20&&yy>0&&yy<=20&&ch1[xx][yy]!='#')?1:0;} inline bool check2(int xx,int yy){return (xx>0&&xx<=20&&yy>0&&yy<=20&&ch2[xx][yy]!='#')?1:0;} int main() { memset(a,10,sizeof(a)); for(int i=1;i<=20;i++)scanf("%s %s",ch1[i]+1,ch2[i]+1); Q.push(ss(20,20,20,1,0));a[20][20][20][1]=0; while(!Q.empty()) { ss a1=Q.front(); if(a1.x1==1&&a1.y1==20&&a1.x2==1&&a1.y2==1) { cout<<a1.num<<'\n'<<a1.s1<<endl; ans=a1; break; } Q.pop(); for(int i=0,xx1,yy1,xx2,yy2;i<=3;i++) { xx1=a1.x1+fx1[i];xx2=a1.x2+fx2[i]; yy1=a1.y1+fy1[i];yy2=a1.y2+fy2[i]; if(!check1(xx1,yy1)&&!check2(xx2,yy2))continue; if(!check1(xx1,yy1)){xx1=a1.x1;yy1=a1.y1;} if(!check2(xx2,yy2)){xx2=a1.x2;yy2=a1.y2;} if(a[xx1][yy1][xx2][yy2]!=a[0][0][0][0])continue; if(a[xx1][yy1][xx2][yy2]<a1.num)continue; a[xx1][yy1][xx2][yy2]=a1.num; Q.push(ss(xx1,yy1,xx2,yy2,a1.num+1,(a1.s1+ch3[i]))); } } int xx1=20,xx2=20,yy1=20,yy2=1; ch1[xx1][yy1]='A'; for(int i=0,xxx1,yyy1;i<ans.s1.size();i++) { xxx1=xx1;yyy1=yy1; if(ans.s1[i]=='L')yy1--; if(ans.s1[i]=='R')yy1++; if(ans.s1[i]=='U')xx1--; if(ans.s1[i]=='D')xx1++; if(!check1(xx1,yy1)){xx1=xxx1;yy1=yyy1;} ch1[xx1][yy1]='A'; } ch2[xx2][yy2]='A'; for(int i=0,xxx2,yyy2;i<ans.s1.size();i++) { xxx2=xx2;yyy2=yy2; if(ans.s1[i]=='L')yy2++; if(ans.s1[i]=='R')yy2--; if(ans.s1[i]=='U')xx2--; if(ans.s1[i]=='D')xx2++; if(!check2(xx2,yy2)){xx2=xxx2;yy2=yyy2;} ch2[xx2][yy2]='A'; } for(int i=1;i<=20;i++)printf("%s %s \n",ch1[i]+1,ch2[i]+1); return 0; }
|