JAVA代码
import java.util.*;
public class Main{
static int N=210,ax,ay,bx,by,n,m,INF=0x3f3f3f3f;
static char[][] g=new char [N][N];
static int[][] dist=new int [N][N];
static int[][] d1=new int [N][N];
static int[][] d2=new int [N][N];
static pair []q=new pair [N*N];
static int []dx={1,0,-1,0},dy={0,1,0,-1};
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
n=sc.nextInt();
m=sc.nextInt();
for(int i=0;i<n;i++){
String s=sc.next();
for(int j=0;j<m;j++){
g[i][j]=s.charAt(j);
if(g[i][j]=='Y'){
ax=i;
ay=j;
}
if(g[i][j]=='M'){
bx=i;
by=j;
}
}
}
bfs(ax,ay);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
d1[i][j]=dist[i][j];
bfs(bx,by);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
d2[i][j]=dist[i][j];
int res=INF;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='@')
res=Math.min(res,d1[i][j]+d2[i][j]);
}
}
System.out.println(res*11);
}
}
public static void bfs(int x,int y){
int hh=0,tt=-1;
q[++tt]=new pair(x,y);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
dist[i][j]=INF;
dist[x][y]=0;
while(hh<=tt){
pair t=q[hh++];
for(int i=0;i<4;i++){
int sx=t.x+dx[i];
int sy=t.y+dy[i];
if(sx<0||sy<0||sx>=n||sy>=m)continue;
if(g[sx][sy]=='#'||dist[sx][sy]!=INF)continue;
q[++tt]=new pair(sx,sy);
dist[sx][sy]=dist[t.x][t.y]+1;
}
}
}
}
class pair{
int x,y;
public pair(int x,int y){
this.x=x;
this.y=y;
}
}