构造联通网最小代价生成树称为最小生成树。
Prime算法。
由点到边~
输入二维n*n矩阵,代表相应两点之间权重大小。我们的目标是选出连通所有点的权重和最小的一条路。
思路:以第一个点为起点,选择它连接的所有点中权重最小的连接点,被选中的点成为第一次连通第一个点的点,之后更新adjvex[]数组,选中点相应下标对应数据设为0。之后以选中的点为下一次数据的参考行,更新保存相关顶点边的权重的数组lowcost[],再在该数组中选中权重最小值,保存位置,更新相应位置的adjvex数组,依次进行,付代码如下。
#include <iostream>
using namespace std;
void main()
{
int n;
cout << "请输入部落个数n" << endl;
cin >> n;
cout << "请输入n行n列的距离矩阵" << endl;
int a[10][10];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
int min,j, k;
int sum = 0;
int adjvex[10];
int lowcost[10];
lowcost[0] = 0;
adjvex[0] = 0;
for (int i = 1; i < n; i++)
{
lowcost[i] = a[0][i];
adjvex[i] = 0;
}
for (int i = 1; i < n; i++)
{
min = 65535;
j = 1;
k = 0;
while (j < n)
{
if (lowcost[j] != 0 && lowcost[j] < min)
{
min = lowcost[j];
k = j;
}
j++;
}
sum += min;
lowcost[k] = 0;
for (j = 1; j < n; j++)
{
if (lowcost[j] != 0 && a[k][j] < lowcost[j])
{
lowcost[j] = a[k][j];
adjvex[j] = k;
}
}
}
cout << sum << endl;
}
以上输出为最小权重和。