想看更多的解题报告: http://iyenn.com/rec/1824570.html
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离
解题思路:又是一个最小生成树,因为给出了一个二维矩阵代表他们的距离,直接算prim就行了
- /*
- prim
- Memory 204K
- Time 16MS
- */
- #include
- using namespace std;
- #define MAXV 101
- #define inf 1<<29
-
- int map[MAXV][MAXV],n;
-
- void prim(){
- int i,j,d[MAXV],vis[MAXV],mi,v;
- for(i=1;i<=n;i++){
- d[i]=map[1][i];
- vis[i]=0;
- }
- for(i=1;i<=n;i++){
- mi=inf;
- for(j=1;j<=n;j++)
- if(!vis[j] && d[j]
- mi=d[j];
- v=j;
- }
- vis[v]=1;
- for(j=1;j<=n;j++)
- if(!vis[j] && d[j]>map[v][j])
- d[j]=map[v][j];
- }
- for(d[0]=0,i=1;i<=n;i++) d[0]+=d[i];
-
- printf("%d\n",d[0]);
- }
-
- int main(){
- int i,j;
- while(~scanf("%d",&n)){
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- scanf("%d",&map[i][j]);
- prim();
- }
- return 0;
- }
注:本文转载自blog.csdn.net的wangjian8006的文章"http://blog.csdn.net/wangjian8006/article/details/7875922"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
评论记录:
回复评论: