最小生成数 克鲁斯卡尔 普里姆 matlab
克鲁斯卡尔:
function T=MST_Kruskal(G)
n=0;
if isfield(G,'w') && ~isempty(G.w) && size(G.w,1)==size(G.w,2)
W=G.w;n=size(W,1);
end
if isfield(G,'e') && ~isempty(G.e) && size(G.e,2)==3
E=G.e; n=max(max(E(:,1:2));
elseif n==0
error('incorrect input argument');
else
E=[];
for i=1:n
for j=i+1:n
if W(i,j)~=0 && W(i,j)~=inf
E=[E; i j W(i,j)];
end
end
end
end T=[];
m=0;
C=1:n;
while m<n-1 && ~isempty(E)
e=E(:,3);
[minW, ind]=min(e);
v1=E(ind,1);
v2=E(ind,2);
if C(v1)~=C(v2)
T=[T; E(ind,:)];
m=m+1;
C(C==C(v2))=C(v1);
end
E(ind,:)=[];
end
普里姆:
function T=MST_Prim(G)
n=0;
if isfield(G,'w') && ~isempty(G.w) && size(G.w,1)==size(G.w,2)
W=G.w;n=size(W,1);
end
if isfield(G,'e') && ~isempty(G.e) && size(G.e,2)==3
E=G.e; n=max(max(E(:,1:2));
elseif n==0
error('incorrect input argument');
else
E=[];
for i=1:n
for j=i+1:n
if W(i,j)~=0 && W(i,j)~=inf
E=[E; i j W(i,j)];
end
end
end
end V=1:n;
U=[1]; V=setdiff(V,U);
T=[]; while length(U)<n
EUV=[];
for k=1:size(E,1)
if ismember(E(k,1), U) && ismember(E(k,2), U) || ~ismember(E(k,1), U) && ~ismember(E(k,2), U)
else
EUV=[EUV; E(k,:)];
end
end e=EUV(:,3);
[minW ind]=min(e);
v1=EUV(ind,1);
v2=EUV(ind,2);
if ismember(v1,U)
U=[U, v2];
else
U=[U, v1];
end
T=[T; v1 v2 minW];
end
最小生成数 克鲁斯卡尔 普里姆 matlab的更多相关文章
- hduoj-1301 Jungle Roads(最小生成树-克鲁斯卡尔和普里姆求解)
普里姆求解: #include<cstdio> #include<cmath> #include<cstring> #include<iostream> ...
- 最小生成树入门(克鲁斯卡尔+普利姆 hdu1233)
克鲁斯卡尔 #include <set> #include <map> #include <queue> #include <stack> #inclu ...
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 最小生成树---普里姆算法(Prim算法)和克鲁斯卡尔算法(Kruskal算法)
普里姆算法(Prim算法) #include<bits/stdc++.h> using namespace std; #define MAXVEX 100 #define INF 6553 ...
- 经典问题----最小生成树(prim普里姆贪心算法)
题目简述:假如有一个无向连通图,有n个顶点,有许多(带有权值即长度)边,让你用在其中选n-1条边把这n个顶点连起来,不漏掉任何一个点,然后这n-1条边的权值总和最小,就是最小生成树了,注意,不可绕成圈 ...
- 图解最小生成树 - 普里姆(Prim)算法
我们在图的定义中说过,带有权值的图就是网结构.一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边.所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接 ...
- 普里姆Prim算法介绍
普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法. 基本思想 对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T ...
- JS实现最小生成树之普里姆(Prim)算法
最小生成树: 我们把构造连通网的最小代价生成树称为最小生成树.经典的算法有两种,普利姆算法和克鲁斯卡尔算法. 普里姆算法打印最小生成树: 先选择一个点,把该顶点的边加入数组,再按照权值最小的原则选边, ...
- hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)
还是畅通工程 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
随机推荐
- 短视频APP是如何开启你的美好生活的?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯视频云终端团队发表于云+社区专栏 常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ. ...
- Eclipse svn 中文转成英文
- linux下在线升级nodejs
因现有项目需要用一个截屏node包,此包必须新版本,所以紧急升级下测试环境nodejs,后续再升级线上,小小试了下node在线升级 方案1,使用npm安装n模块,使用n来升级nodejs 首先要知道n ...
- centos6安装docker,先升级系统内核
安装docker,其他的源可能导致你的内核和docker的版本不一致,需要将系统内核升级至3.x 查看当前系统版本 cat /etc/issue 查看当前内核版本 uname -r #uname -a ...
- autofac使用Common Serivce Locator跟随wcf,mvc,web api的实例控制
autofac本身只提供了基本的ioc容器的功能 要想在mvc,wcf,web api中使用,除了autofac本身,还需要引入对应的包(点击对应连接可查看文档) 除此之外,使用Common Serv ...
- EventLog组件读写事件日志
使用.Net中的EventLog控件使您可以访问或自定义Windows 事件日志,事件日志记录关于重要的软件或硬件事件的信息.通过 EventLog,可以读取现有日志,向日志中写入项,创建或删除事件源 ...
- Java多态-如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new ...
- javaScript 简单的时间格式转换【转】
转自:http://blog.csdn.net/lxl_family/article/details/38693903.根据时间戳,转成相对的字符串形式 function timeStamp2Stri ...
- java基础之运算符与语句
一.运算符 1.算数运算符 运算符 名称 举例 + 加法 A等于10,B等于3 则A+B=13 - 减法 A等于10,B等于3 则A-B=7 * 乘法 A等于10,B等于3 则A*B=30 / 除法 ...
- JPA注解@GeneratedValue
@GeneratedValue是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以看出. public enum GenerationType { TABLE, ...