POJ 1258

来源:互联网 发布:centos 查看软件版本 编辑:程序博客网 时间:2024/04/30 11:11

题意:给一个n*n的矩阵 ,矩阵map[i][j]代表i农田和j农田相连的花费,选择一些城市相连,使得从任意一个城市出发都可以到达任意城市,要求这些路的花费总和最小

思路:一个裸的最小生成树,prim

#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>const int qq=105;int map[qq][qq];int vis[qq];int dis[qq];int n;int Prim(){memset(vis,0,sizeof(vis));for(int i=1; i<=n; ++i)dis[i]=map[1][i];vis[1]=1;int minx,k;int ans=0;for(int i=1; i<n; ++i){minx=1e8+5;for(int j=1; j<=n; ++j)if(!vis[j] && dis[j]<minx)minx=dis[k=j];ans+=minx;vis[k]=1;for(int j=1; j<=n; ++j)if(!vis[j] && map[k][j]<dis[j])dis[j]=map[k][j];}return ans;}int main(){while(scanf("%d",&n)!=EOF){for(int j,i=1; i<=n; ++i)for(j=1; j<=n; ++j)scanf("%d",&map[i][j]);int ans=Prim();printf("%d\n",ans);}return 0;}


0 0