65,186
社区成员




#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int n, m;
char map[225][225];
int Yi_times[225][225],Mer_times[225][225];
int Yi_bx, Yi_by, Mer_bx, Mer_by;
int KFCx[225], KFCy[225], numofKFC;
int totaltime[225];
void bfs(int bx,int by,int (*ptime)[225])
{
queue<int> s;
s.push(bx); s.push(by);
ptime[bx][by] = 1;
int tx, ty;
while (!s.empty())
{
tx = s.front(); s.pop();
ty = s.front(); s.pop();
for(int i=-1;i<=1;i++)
for (int j = -1; j <= 1; j++)
{
if (i != j&&i != -j)
{
int nx = tx + i;
int ny = ty + j;
if (nx >= 0 && ny >= 0 && nx < n&&ny < m&&map[nx][ny]!='#' && !ptime[nx][ny])
{
ptime[nx][ny] = ptime[tx][ty] + 1;
s.push(nx); s.push(ny);
}
}
}
}
}
int main()
{
while (scanf("%d %d", &n, &m) != EOF&&n&&m)
{
memset(Yi_times, 0, sizeof(Yi_times));
memset(Mer_times, 0, sizeof(Mer_times));
memset(totaltime, 0, sizeof(totaltime));
numofKFC = 0;
for(int i=0;i<n;i++)
for (int j = 0; j < m; j++)
{
cin >> map[i][j];
if (map[i][j] == 'Y')
{
Yi_bx = i;
Yi_by = j;
}
if (map[i][j] == 'M')
{
Mer_bx = i;
Mer_by = j;
}
if (map[i][j] == '@')
{
KFCx[numofKFC] = i;
KFCy[numofKFC] = j;
numofKFC++;
}
}
bfs(Yi_bx, Yi_by, Yi_times);
bfs(Mer_bx, Mer_by, Mer_times);
for (int i = 0; i < numofKFC; i++)
{
if (Yi_times[KFCx[i]][KFCy[i]] != 0 && Mer_times[KFCx[i]][KFCy[i]] != 0)
totaltime[i] = Yi_times[KFCx[i]][KFCy[i]] + Mer_times[KFCx[i]][KFCy[i]] - 2;
else
totaltime[i] = 0;
}
//cout << (*min_element(totaltime, totaltime + numofKFC)) * 11 << endl;
//sort(totaltime, totaltime + numofKFC);
int min = 9999;
for (int i = 0; i < numofKFC; i++)
{
if (totaltime[i]!=0&&min > totaltime[i])
min = totaltime[i];
}
cout << min * 11 << endl << endl;
/*for (int i = 0; i < numofKFC; i++)
cout << totaltime[i] << endl;*/
}
}