标签:
Description
Input
Output
Sample Input
Sample Output
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; struct p { int x,y; int t; };p f,r; int n,m,ans; char map[205][205]; int v1[205][205],v2[2][205][205]; int yi[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; void bfs(int x,int y,int k) { queue<p>q; while (!q.empty()) q.pop(); f.x=x; f.y=y; f.t=0; int i; q.push(f); while (!q.empty()) { r=q.front(); q.pop(); f.t=r.t+1; for (i=0;i<4;i++) { f.x=r.x+yi[i][0]; f.y=r.y+yi[i][1]; if (f.x>0&&f.x<=n&&f.y>0&&f.y<=m&&map[f.x][f.y]!=‘#‘&&!v1[f.x][f.y]) { if (map[f.x][f.y]==‘@‘) v2[k][f.x][f.y]=f.t; v1[f.x][f.y]=1; q.push(f); } } } return ; } int main() { int i,j,x1,x2,y1,y2; while (~scanf("%d%d",&n,&m)) { x1=y1=x2=y2=1; for (i=1;i<=n;i++) for (j=1;j<=m;j++) { scanf(" %c",&map[i][j]); if (map[i][j]==‘Y‘) {x1=i;y1=j;} if (map[i][j]==‘M‘) {x2=i;y2=j;} } memset(v1,0,sizeof(v1)); memset(v2,0,sizeof(v2)); v1[x1][y1]=1; bfs(x1,y1,0); memset(v1,0,sizeof(v1)); v1[x2][y2]=1; bfs(x2,y2,1); ans=1000000; for (i=1;i<=n;i++) for (j=1;j<=m;j++) { if (v2[0][i][j]&&v2[1][i][j]) ans=min(ans,v2[0][i][j]+v2[1][i][j]); } printf("%d\n",11*ans); } }
标签:
原文地址:http://www.cnblogs.com/pblr/p/4705329.html