20pts,TLE8个点的蒟蒻bfs求调

P2298 Mzc和男家丁的游戏

```cpp #include<bits/stdc++.h> using namespace std; struct Node{ int x,y; Node(){} Node(int x,int y):x(x),y(y){} }st; const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; queue<Node> q; int f[2010][2010],dis[2010][2010],n,m; char t;/* bool vis[2010][2010];*/ Node next(Node cur,int op){ return Node(cur.x+dx[op],cur.y+dy[op]); } bool check(Node a){ return f[a.x][a.y]&&a.x>=1&&a.x<=n&&a.y>=1&&a.y<=m/*&&(!vis[a.x][a.y])*/; } int bfs(Node a){ q.push(a); dis[a.x][a.y]=0; while(!q.empty()){ Node cur=q.front(); q.pop();/* vis[cur.x][cur.y]=1; if(f[cur.x][cur.y]==2) return dis[cur.x][cur.y];*/ for(int i=0;i<4;i++){ Node nxt=next(cur,i); if(check(nxt)){ q.push(nxt); dis[nxt.x][nxt.y]=dis[cur.x][cur.y]+1; if (f[nxt.x][nxt.y] == 2) return dis[nxt.x][nxt.y]; else f[nxt.x][nxt.y] = 0; } } } return -1; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ t=getchar(); while(t!='m'&&t!='d'&&t!='.'&&t!='#') t=getchar(); f[i][j]=(t=='#'?0:1); if(t=='m') st=Node(i,j); else if(t=='d') f[i][j]=2; }/* while(t!='\n'&&t!=EOF) t=getchar();*/ } int x=bfs(st); if(~x) printf("%d\n",x); else puts("No Way!"); return 0; } ``` 这样改就A了
by M_K_W_ @ 2023-06-13 22:19:45


@[M_K_W_](/user/688417) 感谢
by 摸鱼ing @ 2023-07-27 08:24:23


|