dfs样例都过不了……
#include<bits/stdc++.h>
using namespace std;
int m,n,bs,x,y;
char a[52][52];
string b[1002];
void dfs(int sp,int x,int y){
if(x<1||y<1||x>n||y>m||a[x][y]=='X')return;
if(sp==bs)a[x][y]='*';
if(b[sp]=="NORTH"){
dfs(sp,x,y-1);
if(b[sp+1]=="SOUTH")dfs(sp+1,x,y+1);
if(b[sp+1]=="WEST")dfs(sp+1,x-1,y);
if(b[sp+1]=="EAST")dfs(sp+1,x+1,y);
return;
}
if(b[sp]=="SOUTH"){
dfs(sp,x,y+1);
if(b[sp+1]=="NORTH")dfs(sp+1,x,y-1);
if(b[sp+1]=="WEST")dfs(sp+1,x-1,y);
if(b[sp+1]=="EAST")dfs(sp+1,x+1,y);
return;
}
if(b[sp]=="WEST"){
dfs(sp,x-1,y);
if(b[sp+1]=="NORTH")dfs(sp+1,x,y-1);
if(b[sp+1]=="SOUTH")dfs(sp+1,x,y+1);
if(b[sp+1]=="EAST")dfs(sp+1,x+1,y);
return;
}
if(b[sp]=="EAST"){
dfs(sp,x+1,y);
if(b[sp+1]=="NORTH")dfs(sp+1,x,y-1);
if(b[sp+1]=="SOUTH")dfs(sp+1,x,y+1);
if(b[sp+1]=="WEST")dfs(sp+1,x-1,y);
return;
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[j][i];
if(a[j][i]=='*')x=j,y=i,a[j][i]='.';
}
}
cin>>bs;
for(int i=1;i<=bs;i++)cin>>b[i];
dfs(1,x,y);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cout<<a[j][i];
}
cout<<endl;
}
return 0;
}