最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改。先把算法过程记下来:

prime算法:

                

原始的加权连通图——————D被选作起点,选与之相连的权值最小的边

        

    选与D、A相连权值最小的边——————可选的有B(7)、E(8)、G(11)

            

    

————————————————————————重复上述步骤,最小生成树

代码:

用maze[M][M]存两点间的长度,vis[M]判断是否使用此边,dis[M]记录最小生成树的权值。

(代码来自学长发的模板)

 #include"iostream"
#include"cstring"
#include"cstdio" #define INF 0x7f7f7f7f
#define MAXN 1005 using namespace std; int n,m;
int maze[MAXN][MAXN];
bool vis[MAXN];
int dis[MAXN]; void prim()
{
int ans = ;
dis[] = ;
for(int i = ;i <= n;i++)
{
int mark = INF;
int minn = INF;
for(int j = ;j <= n;j++)
{
if(!vis[j] && dis[j] < minn)//判断每次选的都是当前情况下的最小权值
{
minn = dis[j];
mark = j;
}
}
vis[mark] = true;
ans += dis[mark];
for(int j = ;j <= n;j++)
{
if(!vis[j] && maze[mark][j] < dis[j]) //选边
{
dis[j] = maze[mark][j];
}
}
}
printf("%d\n",ans);
} int main(void)
{
while(~scanf("%d%d",&n,&m))
{
memset(maze,INF,sizeof(maze));
memset(vis,false,sizeof(vis));
memset(dis,INF,sizeof(dis));
while(m--)
{
int x,y,len;
scanf("%d%d%d",&x,&y,&len);
if(x != y && maze[x][y] > len)//初始化两点间的权值
{
maze[x][y] = len;
maze[y][x] = len;
}
}
prim();
}
return ;
}

——prim

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~·*****************************************************************************************************************`~~~

kruskal算法:

               

—————————————————————————把边排序,先选定最小的边

         

——————依次找边——————————————————

————————最小生成树

代码好像有点复杂,要用上并查集,决定结合多方自己补个模板(✿◡‿◡)

 struct node
{
int st,en,len;
}e[];
int n,m;
int fa[];
bool cmp(const node &n1,const node&n2)
{
return n1.len<n2.len;
}
int findx(int x)//并查集的find
{
if(fa[x]==x) return fa[x];
else
return fa[x]=findx(fa[x]);
}
int kruskal()
{
int ans=;
for(int i=;i<=n;i++) fa[i]=i;//初始化并查集
for(int i=;i<=m;i++)
scanf("%d%d%d",&e[i].st,&e[i].en,&e[i].len);
sort(e+,e+m+,cmp);
for(int i=;i<=m;i++)
{
int fx=findx(e[i].st),fy=findx(e[i].en);
if(fx!=fy)
{
ans+=
fa[fx]=fy;//最小生成树,已结找到的边有同一个父亲
}
} return ans;
}
void judge()
{
int flag=,term=findx();
for(int i=;i<=n;i++)//判断是否连通
{
if(findx(i)!=term)
{
flag=;
break;
}
}
}

——kruskal

图片来自:

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html

最小生成树(prim&kruskal)的更多相关文章

  1. 最小生成树 Prim Kruskal

    layout: post title: 最小生成树 Prim Kruskal date: 2017-04-29 tag: 数据结构和算法 --- 目录 TOC {:toc} 最小生成树Minimum ...

  2. 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)

    matrix.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include < ...

  3. 数据结构学习笔记05图(最小生成树 Prim Kruskal)

    最小生成树Minimum Spanning Tree 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 树: 无回路   |V|个顶 ...

  4. 布线问题 最小生成树 prim + kruskal

    1 : 第一种 prime     首先确定一个点 作为已经确定的集合 , 然后以这个点为中心 , 向没有被收录的点 , 找最短距离( 到已经确定的点 ) , 找一个已知长度的最小长度的 边 加到 s ...

  5. POJ 1258 Agri-Net(最小生成树 Prim+Kruskal)

    题目链接: 传送门 Agri-Net Time Limit: 1000MS     Memory Limit: 10000K Description Farmer John has been elec ...

  6. 最小生成树-Prim&Kruskal

    Prim算法 算法步骤 S:当前已经在联通块中的所有点的集合 1. dist[i] = inf 2. for n 次 t<-S外离S最近的点 利用t更新S外点到S的距离 st[t] = true ...

  7. 邻接表c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)

    graph.c #include <stdio.h> #include <stdlib.h> #include <limits.h> #include " ...

  8. poj1861 最小生成树 prim &amp; kruskal

    // poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是 #include <cstdio> #includ ...

  9. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

随机推荐

  1. jquery Combo Select 下拉框可选可输入插件

    Combo Select 是一款友好的 jQuery 下拉框插件,在 PC 浏览器上它能模拟一个简单漂亮的下拉框,在 iPad 等移动设备上又能回退到原生样式.Combo Select 能够对选项进行 ...

  2. 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...

  3. 多条件分页查找(SQL拼接方法)

    def startTime=params.startTime+" 00:00:00"  def endTime=params.endTime + " 23:59:59&q ...

  4. Linux服务器SSH无密码访问

    1.编辑Hosts文件: [root@yqtrack-elk01 /]# vim /etc/hosts

  5. Nginx配置SSL证书部署HTTPS网站

    1.购买ssl证书 购买网站:沃通 2.上传证书到nginx服务器,然后进行解压. 解压后的的效果: [root@bubidev-ng3 nginx]# pwd/etc/nginx [root@bub ...

  6. UP Board 网络设置一本通

    前言 原创文章,转载引用务必注明链接,水平有限,欢迎指正. 本文环境:ubilinux 3.0 on UP Board 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我的 ...

  7. thinkphp 3.2 CronRunBehavior.class 使用

    1.配置文件 在www\erp\App\Common\Conf tags.php <?php return array( 'app_begin' => array('Behavior\Cr ...

  8. 2.3switch case 语句注意事项。

    #include<stdio.h> int main() { void action1(int, int),action2(int, int); char ch; , b=; ch = g ...

  9. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  10. ubuntu 12.04 sever下安装jre

    具体步骤如下: 首先打开http://www.java.com/en/download/linux_manual.jsp?locale=en 选择你想下载的版本,此处我选择的是jre-7u25-lin ...