30pts求救!!给关注!!

P1189 SEARCH

本蒟蒻斗胆给大佬提个建议,你这个函数太多恐怕有点乱,导致我看不出有什么错误。先献上我的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


|