传送门
一个搜索小技巧挺多的题
懒得写思路了,就是模拟
上代码
#include <bits/stdc++.h>
using namespace std;
char tu[15][15],x,y,fx;
int dx[5]={-1,0,1,0};
int dy[5]={0,1,0,-1};
char bb[5]={'^','>','v','<'};
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void lgrmove(int xx,int yy){
int next_x=xx+dx[fx];
int next_y=yy+dy[fx];
if(next_x<=0||next_y<=0||next_x>8||next_y>8) return ;//你yasi啦!
if(tu[next_x][next_y]!='.')lgrmove(next_x,next_y);
tu[next_x][next_y]=tu[xx][yy];
tu[xx][yy]='.';
if(tu[next_x][next_y]=='^'||tu[next_x][next_y]=='<'||tu[next_x][next_y]=='>'||tu[next_x][next_y]=='v') x=next_x,y=next_y;
}
int main(){
for(int i=1;i<=8;i++) scanf("%s",tu[i]+1);
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
if(tu[i][j]=='^'){
fx=0;
x=i;
y=j;
break;
}
else if(tu[i][j]=='<'){
fx=3;
x=i;
y=j;
break;
}
else if(tu[i][j]=='>'){
fx=1;
x=i;
y=j;
break;
}
else if(tu[i][j]=='v'){
fx=2;
x=i;
y=j;
break;
}
}
}
string op;
cin>>op;
int n;
while(op!="#"){
if(op=="move"){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) lgrmove(x,y);//lgr在xy顾雍n次
}
else if(op=="turn"){
cin>>op;
if(op=="left"){
if(fx<1) fx+=4;
fx--;
tu[x][y]=bb[fx];
}
else if(op=="back"){
fx+=2;
fx%=4;
tu[x][y]=bb[fx];
}
else if(op=="right"){
fx+=1;
fx%=4;
tu[x][y]=bb[fx];
}
}
cin>>op;
}
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
printf("%c",tu[i][j]);
}
cout<<endl;
}
return 0;
}