标签:
#include<iostream> #include<queue> #include<cstring> using namespace std; int m,n; int vis[210][210]; char mapp[210][210]; int dis[210][210][2]; int dir[4][2] = {1,0,0,1,-1,0,0,-1},flag; struct node{ int x; int y; int step; }; bool judge(int x,int y) { if(x>=0&&x<m&&y>=0&&y<n&&mapp[x][y]!=‘#‘&&vis[x][y]==0) return 1; return 0; } int BFS(int x,int y) { queue<node>q; node now,next; now.x=x; now.y=y; now.step=0; vis[x][y]=1; q.push(now); while(!q.empty()) { now=q.front(); q.pop(); next.step=now.step+1; for(int i=0;i<4;i++) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; if(judge(next.x,next.y)) { vis[next.x][next.y]=1; if(mapp[next.x][next.y]==‘@‘) dis[next.x][next.y][flag]=next.step; q.push(next); } } } } int main() { while(cin>>m>>n) { int min=9999999; for(int i=0;i<m;i++) for(int j=0;j<n;j++) dis[i][j][0]=dis[i][j][1]=min; for(int i=0;i<m;i++) for(int j=0;j<n;j++) { cin>>mapp[i][j]; } for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(mapp[i][j]==‘Y‘) { flag=0; memset(vis,0,sizeof(vis)); BFS(i,j); } else if(mapp[i][j]==‘M‘) { flag=1; memset(vis,0,sizeof(vis)); BFS(i,j); } } for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(mapp[i][j]==‘@‘ && min>dis[i][j][0]+dis[i][j][1]) min=dis[i][j][0]+dis[i][j][1]; printf("%d\n",min*11); } }
标签:
原文地址:http://www.cnblogs.com/wangmenghan/p/5565686.html