js图的数据结构处理----普里姆算法
//求加权无向连通图的MST的贪心算法
//最小树,最小路径联通各个点
function PRIM(){
var graph = [
[],
[undefined,Infinity, 23 ,Infinity,Infinity,Infinity, 28 ,36],
[undefined, 23 ,Infinity, 20 ,Infinity,Infinity,Infinity,1],
[undefined,Infinity, 20 ,Infinity, 15 ,Infinity,Infinity,4],
[undefined,Infinity,Infinity, 15 ,Infinity, 3 ,Infinity,9],
[undefined,Infinity,Infinity,Infinity, 3 ,Infinity, 17 ,16],
[undefined, 28 ,Infinity,Infinity,Infinity, 17 ,Infinity,25],
[undefined, 36 , 1 , 4 , 9 , 16 , 25 ,Infinity]
]; this.prim = function(u){
var n = graph.length;
var s = [];
var closest = [];
var lowcost = [];
u = u || 1 ; //初始化集合U的,第一个点为1
for(var i = 1 ; i < n; i++ ){
s[i] = false; //初始化为,未加入
closest[i] = u; //初始化的时候,v-u集合的所有点,都到第一个点距离最短
lowcost[i] = graph[u][i];//距离
} s[u] = true;
closest[u] = -1;
lowcost[u] = 0; //开始计算
for(var i = 1 ; i < n ; i++){ //寻找最近点
var t = u;
var temp = Infinity;
for(var j = 0; j < n ; j++){
if(lowcost[j] < temp && !s[j]){
temp = lowcost[j];
t = j;
}
} if(t == u){
break;
} s[t] = true; //将t收集进入 U集合 for(var j = 1; j < n; j++){
if(!s[j] && lowcost[j] > graph[t][j]){
lowcost[j] = graph[t][j]; //更新最小距离,进过t接入
closest[j] = t; //记录前溯点
}
} }
return {
u,
closest,
lowcost
}
} } //u集合表示已经确定节点,v-u表示未确定的节点 //s[i]为true表示i已经加入u集合
//closest[j],为集合v-u中的,点j到集合u中的最近点i,closest[j] = i;
//lowcost[j],为集合v-u中的,点j到集合u中的最近点i的距离
//等式成立: map[j][closest[j]] = lowcost[j]; //2、初始化 集合u为1,数组,closet = [], lowcost = [], s = []; //3、在lowcost中找最小值lowcost[t],则点t就是集合u到集合v-u的最近点 //4、将t加入集合u //5、如果集合v-u,结束。否则执行6 //6、对集合v-u中的所有点,更新 lowcost和closest,
//更新方式: if(map[t][j] < lowcost[j]){lowcost[j] = map[t][j]; castset[j]=t; }
//重复执行3 var prim = new PRIM(); console.log(prim.prim())
相对应的还有:克鲁斯卡尔算法
js图的数据结构处理----普里姆算法的更多相关文章
- ACM第四站————最小生成树(普里姆算法)
对于一个带权的无向连通图,其每个生成树所有边上的权值之和可能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树. 普里姆算法是以其中某一顶点为起点,逐步寻找各个顶点上最小权值的边来构建最小生成 ...
- hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)
还是畅通工程 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- 图->连通性->最小生成树(普里姆算法)
文字描述 用连通网来表示n个城市及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价.对于n个定点的连通网可以建立许多不同的生成树,每一棵生成树都可 ...
- 普里姆算法(Prim)
概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图(带权图)里搜索最小生成树.即此算法搜索到的边(Edge)子集所构成的树中,不但包括了连通图里的所有顶点(Vertex)且其所有边的权 ...
- 最小生成树---普里姆算法(Prim算法)和克鲁斯卡尔算法(Kruskal算法)
普里姆算法(Prim算法) #include<bits/stdc++.h> using namespace std; #define MAXVEX 100 #define INF 6553 ...
- 查找最小生成树:普里姆算法算法(Prim)算法
一.算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之 ...
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 普里姆算法(Prim)邻接矩阵法
算法代码 C#代码 using System; namespace Prim { class Program { static void Main(string[] args) { int numbe ...
- Prim算法(普里姆算法)
描述: 一个连通图的生成树是指一个极小连通子图,它含有图中的全部顶点,但只有足以构成一棵树的 n-1 条边.我们把构造连通网的最小代价生成树成为最小生成树.而Prim算法就是构造最小生成树的一种算法. ...
随机推荐
- 别致的语言GO(GO语言初涉)
最近由于各种原因(好吧,其实是犯懒)已经许久没有再写新的博文了!最近正好在学习一门新的语言,所以正好记录一下自己的学习成果!最近利用每天晚上下班回来后的几小时,学习了Google开发的Go语言,算是对 ...
- Analytics.js简介
analytics.js JavaScript代码段是一种可用于衡量用户与您网站的互动情况的全新方式.它与之前的跟踪代码ga.js类似,但为开发者自定义实现方案提供了更大的灵活性. analytics ...
- log4j组件的用法(log4j1)
在实际的项目开发和维护中,日志是经常用到的一个内容.遇到问题的时候,经常需要通过日志去查出问题的所在并解决问题. 通常我们会用: System.out.println(xxx); 来打印运行中所需要的 ...
- c# 主窗体更新子窗体 进程间通信
1.窗体间数据传输 主窗体连续不断更新给子窗体 本文章来源于网络 年代久远 如有侵犯 请联系删除 1.通过 在windows form之间传值,我总结了有四个方法:全局变量.属性.窗体构造函数和de ...
- Python使用xml.dom解析xml
在菜鸟教程上找了个关于电影信息的xml类型的文档,用python内置的xml.dom来解析提取一下信息. 先复习一下xml概念: XML 指可扩展标记语言(EXtensible Markup Lang ...
- 不可访问内存 Java四种引用包括强引用,软引用,弱引用,虚引用
小结: 1.不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块. 2.垃圾收集器能决定是否一个对象还是可访问的:任何被确定不可访问的对象将会被释放. https://zh.w ...
- ios开发之 NSObject详解
NSObject是大部分Objective-C类继承体系的根类.这个类遵循NSObject协议,提供了一些通用的方法,对象通过继承NSObject,可以从其中继承访问运行时的接口,并让对象具备Obje ...
- [development][tcp/ip][ids] 一个简单有参考价值的库 libnids
libhtp 中的例子, 可以通过libnids快速使用. 或者可以快速的写个sniffer. 支持三个功能 ip分片重组, tcp乱序重排, 端口扫描发现. 工程: https://github.c ...
- 转:Spring AOP中的动态代理
原文链接:Spring AOP中的动态代理 0 前言 1 动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2 S ...
- NodeJS笔记(一)-免安装设置
之前在官网下载的nodejs win64版本4.* 最近发现nodejs都已经更新到了7.X 稳定版都升级到了6.X ,nodejs升级的真是神速了,想要升级下, 使用官方给的方法更新失败(使用的是n ...