说实在的,这个代码,我不是很懂…
#include <stdio.h>
#include<iostream>
#include <stdlib.h>
#include <limits.h>
#define MAXVNUM 80
using namespace std;
int getLength ( int Graph[][MAXVNUM], int n )
{
int lowcos[n];
int teen[n];
int mincos;
int length = 0; //带权路径长度,也是最终要 求的
int i, j, k;
int temp;
lowcos[0] = 0;
for ( i = 0; i < n; i++) {
teen[i] = 0;
lowcos[i] = Graph[0][i]; //第一个结点出发,可以到达哪几个节点
}
for ( i = 1; i < n; i++ ) {
mincos= INT_MAX;
j = 1;
while ( j < n ) {
if ( lowcos[j] > 0 && mincos > lowcos[j] ) {
mincos = lowcos[j];
k = j;
}
j++; //寻找最小权值
}
temp = teen[k];
length += Graph[k][temp];
lowcos[k] = 0;
for( j = 0; j < n; j++ ) {
if( Graph[k][j] < lowcos[j] ) { //加入顶点k
lowcos[j] = Graph[k][j];
teen[j] = k;
}
}
}
return length;
}
int main()//求最小生成树的带权路径长度 prim (加点法) or kruskal(加边法)
{
int numV; // number of vertex顶点
int numE; // numver of edge边
int Graph[MAXVNUM][MAXVNUM];
int i, j;
int a, b, c;
int length;
scanf("%d%d", &numV, &numE); //初始化,-1表示两个顶点之间没有边相连
for( i = 0; i < numV; i++)
for( j = 0; j < numV; j++) {
Graph[i][j] = INT_MAX;
} //构建图的邻接矩阵
for( i = 0; i < numE; i++) {
scanf("%d%d%d", &a, &b, &c);
Graph[a-1][b-1] = c;
Graph[b-1][a-1] = c;
}
length = getLength(Graph,numV);//顶点
cout<<length<<endl;
return 0;
}