#include<bits/stdc++.h> using namespace std; int dx[4]={-1,0,1,0}; int dy[4]={0,-1,0,1}; int a[305][305],max_x=0,max_y=0,min_x=300,min_y=300,vis[305][305]; string feedback; vector<string> movement; void dfs(int x,int y,int dir,vector<string> mov,int back_x,int back_y,int back_dir)//Ĭʼ105105СxyС 1: 2: 3: 4: ̽Ҫback_xback_y { vis[x][y]=true; max_x=max(max_x,x); max_y=max(max_y,y); min_x=min(min_x,x); min_y=min(min_y,y); //dir if(vis[x+dx[dir-1]][y+dy[dir-1]]==false) { printf("GO\n"); cin>>feedback; if(feedback=="SUCC") { a[x][y]=1; mov.push_back("GO"); dfs(x+dx[dir-1],y+dy[dir-1],dir,mov,x,y,dir); mov.pop_back(); } else { max_x=max(max_x,x+dx[dir-1]); min_x=min(min_x,x+dx[dir-1]); max_y=max(max_y,y+dy[dir-1]); min_y=min(min_y,y+dy[dir-1]); } } else { max_x=max(max_x,x+dx[dir-1]); min_x=min(min_x,x+dx[dir-1]); max_y=max(max_y,y+dy[dir-1]); min_y=min(min_y,y+dy[dir-1]); } for(int i=1;i<=3;i++) { mov.push_back("LEFT"); printf("LEFT\n"); cin>>feedback; if(dir==4)//һ feedbackӦû(ֻҪһжϷfeedback) dir=1; else dir++; if(vis[x+dx[dir-1]][y+dy[dir-1]]==false) { printf("GO\n"); cin>>feedback; if(feedback=="SUCC") { a[x][y]=1; mov.push_back("GO"); dfs(x+dx[dir-1],y+dy[dir-1],dir,mov,x,y,dir); mov.pop_back(); } else { max_x=max(max_x,x+dx[dir-1]); min_x=min(min_x,x+dx[dir-1]); max_y=max(max_y,y+dy[dir-1]); min_y=min(min_y,y+dy[dir-1]); } } else { max_x=max(max_x,x+dx[dir-1]); min_x=min(min_x,x+dx[dir-1]); max_y=max(max_y,y+dy[dir-1]); min_y=min(min_y,y+dy[dir-1]); } mov.pop_back(); } if(x==105&&y==105)//ս { printf("END\n"); int n=max_x-min_x+1,m=max_y-min_y+1; printf("%d %d\n",n,m); for(int i=min_x;i<=max_x;i++) { for(int j=min_y;j<=max_y;j++) { if(a[i][j]==1) cout<<'.'; else cout<<'*'; } cout<<endl; } } else { //ԭ· vector<string> mov2; for(auto i:mov) mov2.push_back(i); reverse(mov2.begin(),mov2.end()); int nowx=x,nowy=y,nowdir=dir; printf("RIGHT\n"); cin>>feedback; if(nowdir==1) nowdir=4; else nowdir--; for(auto i:mov) { if(i=="GO") { printf("GO\n"); nowx+=dx[nowdir-1]; nowy+=dy[nowdir-1]; } else { if(i=="LEFT") { printf("RIGHT\n"); if(nowdir==1) nowdir=4; else nowdir--; } else { printf("LEFT1\n"); if(nowdir==4) nowdir=1; else nowdir++; } } cin>>feedback; if(nowx==back_x&&nowy==back_y) break; } while(nowdir!=back_dir) { printf("LEFT\n"); cin>>feedback; if(nowdir==4) nowdir=1; else nowdir++; } } } int main() { int dir; printf("LEFT\n"); cin>>feedback; if(feedback=="N") dir=1; else { if(feedback=="E") dir=4; else { if(feedback=="S") dir=3; else dir=2; } } a[105][105]=1; dfs(105,105,dir,movement,105,105,dir); return 0; }