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

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]

图片描述

图片描述

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏