#include
using namespace std;
char n, m;
char map[200][200]; int kfc[100][2]; int Y[2], M[2];
int ytime[100], mtime[100];
int sum[100],t;//summin表示去所有kfc两人最短时间,sum表示去一个kfc的最短时间
int visit[200][200];
void judge(int x1, int y1, int x0, int y0,int time) {
visit[x1][y1] = 1;
if (x1 == x0 && y1 == y0) {
sum[t] = time;
t++;
}
int x_incre[4] = { 0,1,0,-1 }, y_incre[4] = { 1,0,-1,0 };
int i, j, k;
for (int k = 0; k < 4; k++) {
i = x1 + x_incre[k]; j = y1 + y_incre[k];
if (i >= 0 && j >= 0 && i < n && j < m && map[i][j] != '#' && visit[i][j] != 1)
judge(i, j, x0, y0, time++);
}
}
int main()
{
int kfcnum;
while (cin >> n >> m)
{
kfcnum = 0;
for (int i = 0; i < n; i++)//准备阶段输入地图
{
for (int j = 0; j < m; j++) {
cin >> map[i][j];
if (map[i][j] == '@') {
kfc[kfcnum][0] = i;
kfc[kfcnum][1] = j;//标记kfc位置
kfcnum++;
}
if (map[i][j] == 'Y') {
Y[0] = i; Y[1] = j;//标记yifenfei位置
}
if (map[i][j] == 'M') {
M[0] = i; M[1] = j;//标记Merceki位置
}
}
}
for (int i = 0; i < kfcnum; i++) {
t = 0;
for (int i = 0; i < n; i++)
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
visit[i][j] = 0;
}//将每次到达的位置清空
judge(Y[0], Y[1], kfc[i][0], kfc[i][1], 0);
ytime[i] = sum[0];//判断y到kfc[i]的最短时间
for (int j = 0; j < t; j++)
if (sum[j] < ytime[i])
ytime[i] = sum[t];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
visit[i][j] = 0;
}
t = 0;
judge(M[0], M[1], kfc[i][0], kfc[i][1], 0);
mtime[i] = sum[0]; //判断m到kfc[i]的最短时间
for (int j = 0; j < t; j++)
if (sum[j] < mtime[i])
mtime[i] = sum[t];
}
int mintime = ytime[0] + mtime[0];//求出到所有kfc中的最短时间之和的最小值
for (int i = 1; i < kfcnum; i++)
if ((ytime[i] + mtime[i]) < mintime)
mintime = ytime[i] + mtime[i];
mintime = mintime * 11;
cout << mintime << endl;
}
}
错误太多了
for (int i = 0; i < n; i++)
for (int i = 0; i < n; i++)
这里一样的循环条件重复2次???