题目链接:http://poj.org/problem?id=1287
题目分类:最小生成树
代码:
//#include<bits/stdc++.h> #include<stdio.h> #include<string.h> #include<iostream> using namespace std; const int V=200; #define INF 0x3f3f3f3f int cost[V][V]; int mincost[V]; bool used[V]; int v; int prim() { for(int i=0;i<v;i++) { mincost[i]=INF; used[i]=0; } mincost[0]=0; int res=0; while(1) { int vv=-1; for(int u=0;u<v;u++) { if(!used[u]&&(vv==-1||mincost[u]<mincost[vv])) vv=u; } if(vv==-1) break; used[vv]=1; res+=mincost[vv]; for(int u=0;u<v;u++) mincost[u]=min(mincost[u],cost[vv][u]); } return res; } int main() { int a,b,m,c; while(scanf("%d",&v)&&v) { for(int i=0;i<=v;i++) { for(int j=0;j<=v;j++) { cost[i][j]=INF; } cost[i][i]=0; } scanf("%d",&m); while(m--) { scanf("%d %d %d",&a,&b,&c); cost[a-1][b-1]=min(c,cost[a-1][b-1]); cost[b-1][a-1]=min(c,cost[b-1][a-1]); } int ans=prim(); printf("%d ",ans); } return 0; }