本蒟蒻斗胆给大佬提个建议,你这个函数太多恐怕有点乱,导致我看不出有什么错误。先献上我的AC 代码
```cpp
#include<bits/stdc++.h>
using namespace std;
char mp[55][55];
int n,m,k,dir[1005],sx,sy;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
bool vis[55][55][1005],book[55][55];
struct node{
int x,y,s;
}que[50*50*1000+5];
void bfs(){
int front=1,rear=1;
que[rear]={sx,sy,0};
vis[sx][sy][0]=1;
while(front<=rear){
node q1=que[front++];
if(q1.s==k){
book[q1.x][q1.y]=1;
continue;
}
int cc=q1.s+1;
int xx=q1.x+dx[dir[cc]];
int yy=q1.y+dy[dir[cc]];
while(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!vis[xx][yy][cc]&&mp[xx][yy]!='X'){
que[++rear]={xx,yy,cc};
vis[xx][yy][cc]=1;
xx+=dx[dir[cc]];
yy+=dy[dir[cc]];
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
if(mp[i][j]=='*')sx=i,sy=j;
}
}
cin>>k;
string s;
for(int i=1;i<=k;i++){
cin>>s;
if(s=="EAST")dir[i]=1;
if(s=="SOUTH")dir[i]=2;
if(s=="WEST")dir[i]=3;
if(s=="NORTH")dir[i]=0;
}
bfs();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mp[i][j]=='X')cout<<"X";
else{
if(book[i][j])cout<<"*";
else cout<<".";
}
}
cout<<endl;
}
return 0;
}
```
by shiliuhaoyu @ 2024-02-19 10:30:09