#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 10000;
const int INF = 0x3f3f3f3f;
int cost[MAX_N][MAX_N];
int d[MAX_N];
bool used[MAX_N];
int M, V, a, b, c;
int dijkatra()
{
fill(d, d + V, INF);
fill(used, used + V, false);
d[0] = 0;
int res = 0;
while (true)
{
int v = -1;
for (int u = 0; u < V; u++)
if (!used[u] && (v == -1 || d[u] < d[v]))
v = u;
if (v == -1)break;
used[v] = true;
res += d[v];
for (int u = 0; u < V; u++)
d[u] = min(d[u], cost[v][u]);
}
return res;
}
int main(int argc, char const *argv[])
{
std::ios::sync_with_stdio(false);
while (cin >> V && V)
{
M = V * (V - 1) / 2;
while (M--)
{
cin >> a >> b >> c;
cost[a - 1][b - 1] = c;
cost[b - 1][a - 1] = c;
}
cout << dijkatra() << endl;
}
return 0;
}
prim算法注意:
1.从0开始;
2.填满整个数组;