#include<bits/stdc++.h>
using namespace std;
int n,m,q;
char ch[60][60],ans[60][60];
char a[1010];
struct two
{
int x;
int y;
};
queue <two> qq;
void dos(int x)
{
two t[4000];
int jsq=0;
while(!qq.empty())
{
t[++jsq].x=qq.front().x;
t[jsq].y=qq.front().y;
qq.pop();
ans[t[jsq].x][t[jsq].y]='.';
}
if(x==1)
for(int i=1;i<=jsq;i++)
{
int nx=t[i].x;
int ny=t[i].y;
nx-=1;
while(ch[nx][ny]!='X'&&nx>=1&&nx<=n)
{
qq.push((two){nx,ny});
ans[nx--][ny]='*';
}
}
else if(x==2)
for(int i=1;i<=jsq;i++)
{
int nx=t[i].x;
int ny=t[i].y;
nx+=1;
while(ch[nx][ny]!='X'&&nx<=n&&nx>=1)
{
qq.push((two){nx,ny});
ans[nx][ny]='*';
nx+=1;
}
}
else if(x==3)
for(int i=1;i<=jsq;i++)
{
int nx=t[i].x;
int ny=t[i].y-1;
while(ch[nx][ny]!='X'&&ny>=1&&ny<=m)
{
qq.push((two){nx,ny});
ans[nx][ny]='*';
ny-=1;
}
}
else
for(int i=1;i<=jsq;i++)
{
int nx=t[i].x;
int ny=t[i].y+1;
while(ch[nx][ny]!='X'&&ny<=m&&ny>=1)
{
qq.push((two){nx,ny});
ans[nx][ny]='*';
ny+=1;
}
}
return;
}
void work(int s)
{
if(a[s]=='N')
{
dos(1);
}
else if(a[s]=='S')
{
dos(2);
}
else if(a[s]=='W')
{
dos(3);
}
else dos(4);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>ch[i][j];
ans[i][j]=ch[i][j];
if(ch[i][j]=='*')
{
qq.push((two){i,j});
}
}
}
string st;
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>st;
a[i]=st[0];
}
int x,y;
for(int i=1;i<=q;i++)
{
work(i);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
printf("%c",ans[i][j]);
}
printf("\n");
}
return 0;
}
只对了三个点,有无大佬帮忙看看哪里挂了!