裸的最小生成树。。如果对最小生成树的算法还不是太熟的话。。推荐看看这个博客。。个人认为讲解的不错。
http://blog.csdn.net/fengchaokobe/article/details/7521780
题没什么好说了。。最小生成求最小权值。。
代码:
#include<iostream> #include<string> using namespace std; int map[110][110], low[110], n; int prim() { int sum=0, m=1, s=1, mark, minn, i; bool u[110]={0}; u[s]=1; for(i=1; i<=n; i++) low[i]=10001; while(1) { if(m==n) break; minn=10001; for(i=2; i<=n; i++) { if(!u[i] && low[i]>map[s][i] && map[s][i]) low[i]=map[s][i]; if(!u[i] && minn>low[i]) { minn=low[i];mark=i; } } s=mark; u[s]=1; m++; sum+=minn; } return sum; } int main() { int i, j, x, y, w,t; while(cin>>n && n) { memset(map, 0, sizeof(map)); t=n*(n-1)/2; while(t--) { scanf("%d%d%d",&x, &y, &w); map[x][y]=w; map[y][x]=w; } cout<<prim()<<endl; } return 0; }