题意说明:
纯粹的Prim求MST的最小权值。
#include<iostream>
#include<fstream>
using namespace std;
const int MAX = 101;
const int MAXCOST =100000 ;
int graph[MAX][MAX];
int prim(int graph[][MAX], int n)
{
int lowcost[MAX];
int mst[MAX];
int sum = 0;
for (int i = 1; i <= n; i++)
{
lowcost[i] = graph[1][i];
mst[i] = 1;
}
mst[1] = 0;
for (int i = 1; i <= n - 1; i++)
{
int min=MAXCOST, minid;
for (int j = 2; j <= n; j++)
{
if (lowcost[j] != 0 && lowcost[j] < min)
{
min = lowcost[j];
minid = j;
}
}
lowcost[minid] = 0;
sum += min;
for (int j = 2; j <= n; j++)
{
if (graph[minid][j]<lowcost[j])
{
lowcost[j] = graph[minid][j];
mst[j] = minid;
}
}
}
return sum;
}
int main()
{
//ifstream in("input.txt");
int n,cost;
while (cin >> n&&n != 0)
{
//construct the graph
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cin>>graph[i][j];
}
}
cost = prim(graph,n);
cout << cost << endl;
}
//system("pause");
return 0;
}