感觉写的没太大问题,看过题解,没毛病,很离谱
附上代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<ctime>
#include<map>
#include<stack>
#include<string>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define maxn 55
#define maxm 1005
using namespace std;
int read()
{
int f=1,x=0;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(isdigit(ch))
{
x=x*10+ch-'0';
ch=getchar();
}
return f*x;
}
int n,m,k;
int mve[maxm];
char s[maxn][maxn];
char f[maxn][maxn];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
bool v[maxm][maxn][maxn];
void in()
{
n=read();
m=read();
for(int i=1;i<=n;i++)
scanf("%s",s[i]+1);
k=read();
for(int i=1;i<=k;i++)
{
string s1;
getline(cin,s1);
if(s1=="EAST")
mve[i]=1;
else
if(s1=="SOUTH")
mve[i]=2;
else
if(s1=="WEST")
mve[i]=3;
}
return ;
}
void drow()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
f[i][j]=s[i][j];
if(s[i][j]=='*')
f[i][j]='.';
}
return ;
}
void dfs(int x,int y,int t)
{
if(v[t][x][y]==true)
return ;
v[t][x][y]=true;
if(t>k)
{
f[x][y]='*';
return ;
}
int xx=x+dx[mve[t]],yy=y+dy[mve[t]];
while(xx>0 && xx<=n && yy>0 && yy<=m)
{
if(s[xx][yy]=='X')
break;
dfs(xx,yy,t+1);
xx+=dx[mve[t]];
yy+=dy[mve[t]];
}
return ;
}
int main()
{
in();
drow();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(s[i][j]=='*')
{
dfs(i,j,1);
for(int l=1;l<=n;l++)
printf("%s\n",f[l]+1);
return 0;
}
return 0;
}