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]