裸的最小生成树
prime算法比较方便
#include <iostream> #include <memory.h> using namespace std; const int IN = (1<<28); int G[105][105]; int locost[105]; int N,M,Cost,flag; void Prime() { locost[1] = 0; for( int i = 1; i <= N; i++ ) locost[i] = G[1][i]; for( int u = 1; u < N; u++ ) { int MinV = 0, Min = IN; for( int i = 1; i <= N; i++ ) if( locost[i] && locost[i] < Min ) { MinV = i; Min = locost[i]; } if( !MinV ) break; else { Cost += Min; locost[MinV] = 0; for( int i = 1; i <= N; i++ ) { if( locost[i] && locost[i] > G[MinV][i] ) { locost[i] = G[MinV][i]; } } } } } int main() { while( cin >> N ) { memset(G, 0, sizeof(G)); memset(locost, 0, sizeof(locost)); 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++ ) for( int j = 1; j <= N; j++ ) cin >> G[i][j]; Cost = 0; Prime(); cout << Cost << endl; } return 0; }