一开始用bfs做的,内存炸了,5555
看网上是更新图
#include<bits/stdc++.h>
using namespace std;
char mp[60][60];
int r,c,n,i,j,k;
int sx,sy;
struct node{
int x,y,step;
};
int main()
{
scanf("%d%d",&r,&c);
for(i=1;i<=r;i++)
{
string s;
cin>>s;
for(j=1;j<=c;j++)
{
mp[i][j]=s[j-1];
if(mp[i][j]=='*')
sx=i,sy=j;
}
}
int d=1;
scanf("%d",&n);
int t1=0,t2;
string s;
char ch1,ch2;
while(d<=n)
{
cin>>s;
if(d%2) ch1='*',ch2='#';//等于ch1的被换
else ch1='#',ch2='*';
d++;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
if(mp[i][j]!=ch1) continue;
mp[i][j]='.';
if(s=="NORTH")
{
int m=i-1;
while(m>=1)
{
if(mp[m][j]!='X')
mp[m][j]=ch2;
else break;
m--;
}
}
else if(s=="SOUTH")
{
int m=i+1;
while(m<=r)
{
if(mp[m][j]!='X')
mp[m][j]=ch2;
else break;
m++;
}
}
else if(s=="WEST")
{
int m=j-1;
while(m>=1)
{
if(mp[i][m]!='X')
mp[i][m]=ch2;
else break;
m--;
}
}
else if(s=="EAST")
{
int m=j+1;
while(m<=c)
{
if(mp[i][m]!='X')
mp[i][m]=ch2;
else break;
m++;
}
}
}
}
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
{
if(mp[i][j]=='#') mp[i][j]='*';
printf("%c",mp[i][j]);
}
printf("\n");
}
return 0;
}