最小生成树
prime算法 注意初始化
#include <iostream>
#include <memory.h>
#include <bits/stdc++.h>
const int IN = (1<<28);
using namespace std;
int G[30][30];//邻接矩阵
int locost[30];
int N;
int Cost;
int FindMin();
void prime()
{
locost[1] = 0;
for( int i = 1; i <= N; i++ )
{
locost[i] = G[1][i];
}
for( int i = 1; i < N; i++ )
{
int k = FindMin();
Cost += locost[k];
locost[k] = 0;
for( int j = 1; j <= N; j++ )
{
if( locost[j] && locost[j] > G[k][j] )
{
locost[j] = G[k][j];
}
}
}
}
int FindMin()
{
int Min = IN,k = 0;
for( int i = 1; i <= N; i++ )
{
if( locost[i] && locost[i] < Min )
{
k = i;
Min = locost[i];
}
}
return k;
}
int main()
{
cin >> N;
for( int i = 1; i <= N; i++ )
for( int j = 1; j <= N ; j++ )
{
if( i==j )
G[i][j] = 0;
else
G[i][j] = IN;
}
for( int i = 1; i < N; i++ )
{
int Edage;
char BeginV;
cin >> BeginV;
cin >> Edage;
while( Edage-- )
{
char temp;
cin >> temp;
int templength;
cin >> templength;
G[i][ temp - 'A' + 1] = templength;
G[ temp - 'A' + 1 ][i] = templength;
}
}
Cost = 0;
prime();
cout << Cost << endl;
return 0;
}