最小生成数 克鲁斯卡尔 普里姆 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 ...
随机推荐
- 布局管理器之CardLayout(卡片布局管理器)
对于选项卡这个概念大家可能不会陌生,就是在一个窗口中可以切换显示多页不同的内容,但同一时间只能是其中的某一页可见的,这样的一个个的页面就是选项卡. CardLayout就是类似的这样一个布局管理器,它 ...
- KafkaOffsetMonitor监控kafka
KafkaOffsetMonitor监控kafka 1. KafkaOffsetMonitor是一个可以用于监控Kafka的Topic及Consumer消费状况的工具,其配置和使用特别的方便.源项目G ...
- Ruby语言学习系列--String 类函数
函数名称 说明 示例 * 将字符串拷贝N次 “ha”*4 >> “hahahaha” + << concat 连接字符串 “yes” + “no” >& ...
- python算法之冒泡排序
目录 python之冒泡排序 算法原理 算法分析 代码实现 总结 python之冒泡排序 概念: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就 ...
- 边框圆角Css
.box{ background:grey; //灰色背景 height:50px; //高500像素 width:200px; //宽200像素 border-top-left-radius:15p ...
- 工程中添加工程依赖 Xcode iOS
有时我们需要在一个主工程中添加其他的子工程,用来对子工程进行编写修改或者是利用子工程中的库文件等等操作,这时候我们需要用到工程的嵌套. 步骤:(看图说话) 1.新建主工程,名为TestTTTT ...
- 如果你的shiro没学明白,那么应该看看这篇文章,将shiro整合进springboot
最近在做项目的时候需要用到shiro做认证和授权来管理资源 在网上看了很多文章,发现大多数都是把官方文档的简介摘抄一段,然后就开始贴代码,告诉你怎么怎么做,怎么怎么做 相信很多小伙伴即使是跟着那些示例 ...
- java存储图片
import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util. ...
- Guidlines and rules About Overwriting hashCode()
Preface "The code is more what you’d call guidelines than actual rules" – truer words were ...
- Intellij IDEA run coverage之覆盖率测试
Intellij IDEA run coverage之覆盖率测试 idea 的coverage + 我们自己写的测试用例.最后看一下,我们要测的代码有没有测试到,这是一个不错的提高代码质量的方法. i ...