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;
}
posted @ 2020-08-26 16:20  panjoel  阅读(59)  评论(0)    收藏  举报