#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
using namespace std; const int MAXV = ;//最大顶点数
const int INF = ; //n为顶点数
//MAXV为最大顶点数
int n,m;
double G[MAXV][MAXV];
double d[MAXV];// 顶点到集合S的最短距离
bool vis[MAXV] = {false};//标记数组,vis[i] == true表示已访问 double prim()
{
fill(d,d+MAXV,INF);
d[] = ;//只有0号顶点到集合s的距离为0,其他全为INF
double ans = ;//存放最小生成树的边权之和 //找n个点
for(int i=;i<n;i++)
{
int u = -,MIN = INF;//u使d[u]最小,MIN存放该最小的d[u] //每次找一个到集合距离最小的点
for(int j = ;j < n;j++)
{
if(vis[j] == false && d[j] < MIN)
{
u = j; MIN = d[j];
}
} if( u== - )
{
return -;
} //标记u为已访问
vis[u] = true; ans += d[u]; for(int v=;v < n;v++)
{
//如果v未访问,且u能到达v,并且以u为中转可以是v离集合更近
if(vis[v] == false && G[u][v] != INF && G[u][v] < d[v])
{
d[v] = G[u][v] ;
}
}
} return ans;
} struct point
{
int x;
int y;
}; point p[MAXV]; double getDis(point &a,point &b)
{
return sqrt( (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));
} int main()
{
cin >> n; for(int i=;i<n;i++)
{
cin >> p[i].x;
cin >> p[i].y;
}
//初始化图G
fill(G[],G[] + MAXV * MAXV,INF); for(int i=;i<m;i++)
{
cin >> p[i].x;
cin >> p[i].y;
} for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
G[i][j] = getDis(p[i],p[j]);
}
} double ans = prim(); printf("%.2f \n",ans);
return ;
}

prim解决最小生成树问题的更多相关文章

  1. 【算法】Kruskal算法(解决最小生成树问题) 含代码实现

    Kruskal算法和Prim算法一样,都是求最小生成树问题的流行算法. 算法思想: Kruskal算法按照边的权值的顺序从小到大查看一遍,如果不产生圈或者重边,就把当前这条边加入到生成树中. 算法的正 ...

  2. 最小生成树问题---Prim算法与Kruskal算法实现(MATLAB语言实现)

    2015-12-17晚,复习,甚是无聊,阅<复杂网络算法与应用>一书,得知最小生成树问题(Minimum spanning tree)问题.记之. 何为树:连通且不含圈的图称为树. 图T= ...

  3. 最小生成树问题------------Prim算法(TjuOj_1924_Jungle Roads)

    遇到一道题,简单说就是找一个图的最小生成树,大概有两种常用的算法:Prim算法和Kruskal算法.这里先介绍Prim.随后贴出1924的算法实现代码. Prim算法 1.概览 普里姆算法(Prim算 ...

  4. Python小白的数学建模课-18.最小生成树问题

    最小生成树(MST)是图论中的基本问题,具有广泛的实际应用,在数学建模中也经常出现. 路线设计.道路规划.官网布局.公交路线.网络设计,都可以转化为最小生成树问题,如要求总线路长度最短.材料最少.成本 ...

  5. hdu1533 Going Home km算法解决最小权完美匹配

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. 最小生成树问题:Kruskal算法 AND Prim算法

    Kruskal算法: void Kruskal ( ) {     MST = { } ;                           //边的集合,最初为空集     while( Edge ...

  7. 最小生成树问题---Prim算法学习

    一个具有n个节点的连通图的生成树是原图的最小连通子集,它包含了n个节点和n-1条边.若砍去任一条边,则生成树变为非连通图:若增加一条边,则在图中形成一条回路.本文所写的是一个带权的无向连通图中寻求各边 ...

  8. Agri-Net(prim算法,最小生成树问题)

    看图便知道: 来来上代码:         #include <cstdio>#include <cstdlib>#include <cstring>#includ ...

  9. 最小生成树问题(prim算法)POJ-1258 Agri-Net

    /* 这个题很水,但是,莫名其妙runtime error一晚上,重写了一遍就又没了,很伤心! 题意很简单,大致为n个村庄,连光缆,要求连上所有村庄的长度最短. 输入n,接着是n*n的矩阵,直接用pr ...

随机推荐

  1. seam的定时轮巡

    青岛的项目要做一个功能,每天凌晨2点的时候保存一次设备数据,这个就要求项目能够间隔24小时每天去做这个事,是一个自主轮巡. seam框架正好提供了这个功能,@Expiration指定开始时间,@Int ...

  2. 【原】Pchart生成图片

    学习网址: http://wiki.pchart.net/doc.introduction.html http://pchart.sourceforge.net/index.php

  3. cmake编译安装mysql

    运维开发技术交流群欢迎大家加入一起学习(QQ:722381733) 前言:这里我使用的安装方式是(cmake编译),我选择的版本是:cmake-2.8.8.tar.gz.mysql-5.5.32.ta ...

  4. vue 组件通信传值

    父子组件通信: 子组件 <template> <div> <h3 @click="alerrt"> 我是子组件一</h3> < ...

  5. 【Codeforces 158A】Next Round

    [链接] 我是链接,点我呀:) [题意] 让你找到排名的前k名,并列的话,如果分数大于0那么就算晋级 问你最后有多少人可以晋级. [题解] 按照题意模拟就好, 先按照a[max] = a[k]的规则找 ...

  6. CF586D. Phillip and Trains

    /* CF586D. Phillip and Trains http://codeforces.com/problemset/problem/586/D 搜索 */ #include<cstdi ...

  7. Tomcat 7源码学习笔记 -9 tomcat重启后session仍然保留

    使用Tomcat 7缺省的配置,tomcat关闭后重新启动,发现原来的session没有被删掉,用原来的request获取session仍然可以取到.但是并没有配置session持久化. 原因如下: ...

  8. Linux 下rm+grep删除除去指定文件的剩余所有文件

    例如:  删除当前文件夹下    .c和 .h    文件以外的文件 rm -f   `ls ./ | egrep -v "(.c$|.h$)"` 1. ls 列出所有文件; 2. ...

  9. TCP 连接状态

    TCP/IP的设计者如此设计,主要原因有两个: 防止上一次连接中的包迷路后重新出现,影响新的连接(经过2MSL时间后,上一次连接中所有重复的包都会消失). 为了可靠地关闭TCP连接.主动关闭方发送的最 ...

  10. Spring 新手教程(三) 注入和自己主动装配

         Spring注入是指在启动Spring容器载入bean配置的时候.对类变量的赋值. 两种经常使用注入方式:设值注入和构造注入 以下就这部分知识看代码以及代码中的注解: 1.首先看Spring ...