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算法就是构造最小生成树的一种算法. ...
随机推荐
- Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)
最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中 ...
- python 写入CSV出现空白行问题及拓展
最近在学习python,要求让出表格.期间在不懂得情况下,写了些代码,运行后发现存在输入写入猴行之间存在空白行.猴发现原来问题在打开文件的方式不对. 现将我的学习交流经验分享如下: 1,自己的起初代码 ...
- Zabbix监控MySQL免密码设置
zabbix自带MySQL监控模板,配置文件在/etc/zabbix/zabbix_agentd.d userparameter_mysql.conf 如果MySQL不使用密码可以直接使用这个监控模板 ...
- SQL Server 2016 共享功能目录 不可修改
x 个人电脑上没有安装MSSQL,以前需要链接数据库写SQL,都是在{VS ->>视图->>SQL Server对象资源管理器}直接链接数据库进行访问操作的... 但是确实有些 ...
- Datatables js 复杂表头 合并单元格
x →Datatables官网← x 项目中用到的Table都是用Datatables插件来搞得: 以前都是生成一般性的table: 近期要生成一些复杂表头,合并单元格之类的: 研究了一下. x 去官 ...
- [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable<T> on multiple cores
As Ed Essey explained in Partitioning in PLINQ, partitioning is an important step in PLINQ execution ...
- shell脚本之通过发送带\n字符串或expect脚本实现交互输入自动化
编写shell脚本难免遇到需要交互式输入指令的步骤: 方法一: # cat action.sh #!/bin/sh read -p "enter number:" no; read ...
- grp/从Zipkin到Jaeger,Uber的分布式追踪之道tchannel--zipkin with mysql in docker-compose
GRPC----http://www.cnblogs.com/ghj1976/p/4587736.html https://blog.csdn.net/fei33423/article/details ...
- 转:jquery的$(function(){})和$(document).ready(function(){}) 的区别
原文链接:https://www.cnblogs.com/slyzly/articles/7809935.html [转载]jquery的$(function(){})和$(document).rea ...
- Maven之基本概念及特性的基本介绍
maven最主要的概念是坐标和依赖,这是maven可以极大简化构建过程以及进行项目管理的基础. 坐标 类似于地理位置的坐标,maven的坐标也是用来标记的,不同是它是来标记maven中的不同组件,也就 ...