```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