大佬求调
#include<bits/stdc++.h>
using namespace std;
int n,m,k,sx,sy;
bool dis[1010][55][55],can[55][55];
char in[55][55],out[55][55];
char way[1001];
void dfs(int x,int y,int cnt)
{
if(dis[cnt][x][y]||x<1||x>n||y<1||y>m)
{
return;
}
dis[cnt][x][y]=true;
if(cnt==k)
{
out[x][y]='*';
return;
}
if(way[cnt]=='E'&&in[x][y]!='X')
{
for(int i=1;i<=n-x;i++)
{
if(!can[x+i][y]) break;
dfs(x+i,y,cnt+1);
}
}
else if(way[cnt]=='W'&&in[x][y]!='X')
{
for(int i=1;i<x;i++)
{
if(!can[x-i][y]) break;
dfs(x-i,y,cnt+1);
}
}
else if(way[cnt]=='S'&&in[x][y]!='X')
{
for(int i=1;i<=m-y;i++)
{
if(!can[x][y+i]) break;
dfs(x,y+i,cnt+1);
}
}
else if(way[cnt]=='N'&&in[x][y]!='X')
{
for(int i=1;i<y;i++)
{
if(!can[x][y-i]) break;
dfs(x,y-i,cnt+1);
}
}
return;
}
int main()
{
memset(can,false,sizeof(can));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>in[i][j];
out[i][j]=in[i][j];
if(in[i][j]=='*')
{
sx=i;
sy=j;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(in[i][j]=='*'||in[i][j]=='.')
{
can[i][j]=true;
}
}
}
cin>>k;
for(int l=1;l<=k;l++)
{
string c;
cin>>c;
way[l]=c[0];
}
out[sx][sy]='.';
dfs(sx,sy,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<out[i][j];
}
cout<<"\n";
}
return 0;
}