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

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. WebStorm 2016.2.3的安装与汉化

    WebStorm是一款功能出色的JavaScript开发工具.号称是""Web前端开发神器"."最强大的HTML5编辑器"."最智能的Jav ...

  2. JQuery ajax调用一直回调error函数

    使用jquery的ajax调用,发现一直回调error函数,ajax调用代码如下,后台返回是正确的,为什么会报错呢?  var descValue = $('#descEditArea').val() ...

  3. linux下mnt目录作用

    linux下mnt目录作用 一.mount 英文解释 登上; 爬上; 攀登; 骑上; 乘上; 跨上 可直接理解为“挂载” 挂接光驱.USB设备的目录,加载后,会在mnt里多出相应设备的目录.mnt是m ...

  4. js事件流

    event:事件对象,当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存在一个指定地方-event对象,供我们在需要调用.event对象必须是在一个事件调用的函数里 ...

  5. gedit 乱码问题

    因为不同文本的编码方式不同,比如windows下编码方式为GB18030编码 (中文简体环境中的ANSI为GB18030编码,用2个或4个字节表示中文.) 但gedit初始设置并没有自动识别文本的编码 ...

  6. git误删文件找回方法/git版本回退方法

    使用git命令 git rm css/\*.css 我删掉了css文件夹下所有以.css结尾的文件,那么要怎样才能把文件找回来呢,下面说说方法,删掉其他的文件也是一样的方式找回. 第一步:使用git ...

  7. c语言一些知识点的记录

    1.extern关键字 extern关键字可以置于变量或者函数前面,用于告诉编译器此变量或函数定义于其他的模块.

  8. 简单的RPC原型与实现原理

    存在的问题 客户端硬编码服务端的地址 引入注册中心,方便服务的注册与发现 注册中心记录的信息:服务地址列表&服务节点权重 Zookeeper节点类型 临时节点:客户端.. 服务注销: tomc ...

  9. 8Spring初步----青软S2SH(笔记)

    例子: bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  10. spring jdbc获取插入记录的主键id

    在JDBC3.0规范中,当新增记录时,允许将数据库自动产生的主键值绑定到Statement或PreparedStatement中.使用Statement时,可以通过以下方法绑定主键值: int exe ...