标签:
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