prim算法
int Prim(int s)
{
int ans = 0 ;
int vex,addNode,tempMin;
intree[s] = true ;
for (unsigned int i = 0 ; i < G[s].size() ; ++i){
vex = G[s][i].vex;
mindist[vex] = G[s][i].weight;
}
for (int nodeNum = 1 ; nodeNum <= n - 1 ; ++nodeNum){
tempMin = INF;
/*******************************/
for (int i = 1 ; i <= n ; ++i){
if (intree[i] == false && mindist[i] < tempMin){
tempMin = mindist[i];
addNode = i;
}
}
/******************************/
intree[addNode] = true ;
ans += tempMin;
/******************************/
for (unsigned int i = 0 ; i < G[addNode].size() ; ++i){
vex = G[addNode][i].vex;
if (intree[vex] == false && G[addNode][i].weight < mindist[vex])
mindist[vex] = G[addNode][i].weight;
}
/*****************************/
}
return ans;
}
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 205 ;
const int INF = 0x3f3f3f3f ;
struct Node
{
int vex,weight;
Node(int _vex = 0 ,int _weight = 0 ) : vex(_vex),weight(_weight){}
};
vector<Node> G[maxn];
bool intree[maxn];
int mindist[maxn],n;
void Init()
{
for (int i = 0 ; i < maxn ; ++i){
G[i].clear();
intree[i] = false ;
mindist[i] = INF;
}
}
int Prim(int s)
{
int ans = 0 ;
int vex,addNode,tempMin;
intree[s] = true ;
for (unsigned int i = 0 ; i < G[s].size() ; ++i){
vex = G[s][i].vex;
mindist[vex] = G[s][i].weight;
}
for (int nodeNum = 1 ; nodeNum <= n - 1 ; ++nodeNum){
tempMin = INF;
/*******************************/
for (int i = 1 ; i <= n ; ++i){
if (intree[i] == false && mindist[i] < tempMin){
tempMin = mindist[i];
addNode = i;
}
}
/******************************/
intree[addNode] = true ;
ans += tempMin;
/******************************/
for (unsigned int i = 0 ; i < G[addNode].size() ; ++i){
vex = G[addNode][i].vex;
if (intree[vex] == false && G[addNode][i].weight < mindist[vex])
mindist[vex] = G[addNode][i].weight;
}
/*****************************/
}
return ans;
}
int main()
{
int v1,v2,weight;
while (scanf("%d" ,&n) != EOF && n){
Init();
for (int i = 0 ; i < n * (n - 1 ) / 2 ; ++i){
scanf("%d%d%d" ,&v1,&v2,&weight);
G[v1].push_back(Node(v2,weight));
G[v2].push_back(Node(v1,weight));
}
int ans = Prim(1 );
printf("%d\n" ,ans);
}
return 0 ;
}