P2298 Mzc和男家丁的游戏
AC代码
#include<cstdio>
#include<queue>
#include<iostream>
# define M 2010
using namespace std;
int m,n;
char map[M][M];
int que[3][M*M];
int ans[M][M];
int tail,head;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int xx,yy,xl,yl;
bool check[M][M];
int main(){
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>map[i][j];
if(map[i][j]=='m'){xx=i;yy=j;}
if(map[i][j]=='d'){xl=i;yl=j;}
}
}
que[0][0]=xx;
que[1][0]=yy;
while(head<=tail){
for(int i=0;i<4;i++){
int x=que[0][head]+dx[i];
int y=que[1][head]+dy[i];
if(x<0||y<0||x>=m||y>=n||map[x][y]=='#'||check[x][y]){continue;}
check[x][y]=1;
ans[x][y]=ans[que[0][head]][que[1][head]]+1;
if(x==xl&&y==yl){printf("%d\n",ans[x][y]);return 0;}
tail++;
que[0][tail]=x;
que[1][tail]=y;
}
head++;
}
printf("No Way!");
return 0;
}

浙公网安备 33010602011771号