m0_73452408 2023-03-22 22:49 采纳率: 33.3%
浏览 15

请问大这个地图求最短路径代码是哪里有问题,为什么没有输出呢?

img

img


#include <iostream>
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;
    }
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2023-03-22 22:54
    关注

    错误太多了
    for (int i = 0; i < n; i++)
    for (int i = 0; i < n; i++)
    这里一样的循环条件重复2次???

    评论

报告相同问题?

问题事件

  • 创建了问题 3月22日

悬赏问题

  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。