无向图邻接矩阵构建最小生成树时调用的求最小耗费的函数有错

发布于 2022-09-02 20:11:13 字数 1525 浏览 14 评论 0

prime算法里有一个求最短路径的MidEdge函数,我自己写的函数输出的全为0,不知道为什么

template<class T>void MGraph<T>::Prim(MGraph G){

    for (int i = 1; i < G.vertexNum; i++){
        lowcost[i] = G.arc[0][i];//初始化
        adjvex[i] = 0;//最小生成树的顶点集合
    }
    lowcost[0] = 0;//将0顶点加入集合U中
    for (int i = 1; i < G.vertexNum; i++){
        k = MidEdge(lowcost, G.vertexNum);//在lowcost中寻找最短边的顶点
        cout << "(" << k << adjvex[k] << ")" << lowcost[k]<<endl;//输出加入TE中的边
        lowcost[k] = 0;    //将下标为k的顶点加入U集合中,权值赋为0
        for (int j = 1; j < G.vertexNum; j++)
        if (G.arc[k][j] < lowcost[j]){
            lowcost[j] = G.arc[k][j];
            adjvex[j] = k;
        }
    }
}

上面是prime算法,下面是我写的MidEdge函数

 template<class T>int MGraph<T>::MidEdge(int arr[], int x){
    int s = x;
    int i = arr[0];
    int j = 1;
    int xiabiao = 0;
    while (j<s){
        if (arr[j] < i&&arr[j]!=0){
            i = arr[j];    
            xiabiao = j;
        }
        j++;

    }
    cout << "xiabiao 的值:" << xiabiao << endl;//查看xiabiao的值的测试语句
    return xiabiao;
}

构造函数和深度广度遍历都没有问题,就是最小生成树有问题,而且midege函数有问题,但是不知道错在哪里,运行结果如图,图上有测试数据以及最小生成树的错误结果。为什么出来的数据是0 呢?
图片顺序放反了
![图片描述][1]

图片描述

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文