题意:
最小生成树裸题,直接模板。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAX 0x3f3f3f3f
#define mx 55
using namespace std;
int ma[mx][mx],vis[mx],cost,dis[mx];
int n,m;
void init(){
memset(dis, 63, sizeof(dis));
memset(vis, 0, sizeof(vis));
memset(ma, 63, sizeof(ma));
cost=0;
}
void prim(){
for(int i = 1; i <= n; i++){
dis[i] = ma[1][i];
}
dis[1] = 0;
vis[1] = 1;
for(int i = 1; i < n; i++){
int te = MAX,k = 0;
for(int j = 1; j<= n; j++){
if(!vis[j]&&dis[j] < te){
te = dis[j];
k = j;
}
}
cost += te;
vis[k] = 1;
for(int j = 1; j <= n; j++){
if(!vis[j]&&ma[k][j] < dis[j])
dis[j] = ma[k][j];
}
}
}
int main(){
while(scanf("%d",&n)&&n){
init();
scanf("%d",&m);
int a,b,c;
for(int i = 0; i <m; i++){
scanf("%d%d%d",&a,&b,&c);
ma[a][b] = ma[b][a] = min(ma[b][a], c);
}
prim();
cout<<cost<<endl;
}
return 0;
}
\