//求加权无向连通图的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图的数据结构处理----普里姆算法的更多相关文章

  1. ACM第四站————最小生成树(普里姆算法)

    对于一个带权的无向连通图,其每个生成树所有边上的权值之和可能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树. 普里姆算法是以其中某一顶点为起点,逐步寻找各个顶点上最小权值的边来构建最小生成 ...

  2. hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)

    还是畅通工程 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  3. 图->连通性->最小生成树(普里姆算法)

    文字描述 用连通网来表示n个城市及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价.对于n个定点的连通网可以建立许多不同的生成树,每一棵生成树都可 ...

  4. 普里姆算法(Prim)

    概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图(带权图)里搜索最小生成树.即此算法搜索到的边(Edge)子集所构成的树中,不但包括了连通图里的所有顶点(Vertex)且其所有边的权 ...

  5. 最小生成树---普里姆算法(Prim算法)和克鲁斯卡尔算法(Kruskal算法)

    普里姆算法(Prim算法) #include<bits/stdc++.h> using namespace std; #define MAXVEX 100 #define INF 6553 ...

  6. 查找最小生成树:普里姆算法算法(Prim)算法

    一.算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之 ...

  7. HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. 普里姆算法(Prim)邻接矩阵法

    算法代码 C#代码 using System; namespace Prim { class Program { static void Main(string[] args) { int numbe ...

  9. Prim算法(普里姆算法)

    描述: 一个连通图的生成树是指一个极小连通子图,它含有图中的全部顶点,但只有足以构成一棵树的 n-1 条边.我们把构造连通网的最小代价生成树成为最小生成树.而Prim算法就是构造最小生成树的一种算法. ...

随机推荐

  1. Linux搭建Socks5代理服务器

    下面笔者将用SS5在亚马逊云服务器上的Linux搭建一台Socks5 Proxy Server,具体过程如下: 1.首先,编译安装SS5需要先安装一些依赖组件 yum -y install gcc g ...

  2. git命令无法自动补全(sles11.3)

    找到git-completion bash文件 find / -name 'git-completion' /usr/share/doc/git-1.7.1/contrib/completion/gi ...

  3. 如何选择windows 10 系统中默认打开程序

    有时候我们会遇到打开某些文件需要通过open with 选择打开的应用程序,然后再点选always open with. 但是有时候这个方法不起作用,我们可以用如下方法: 1.从settings找到a ...

  4. {Django基础六之ORM中的锁和事务}一 锁 二 事务

    Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在 ...

  5. Vue.js最佳实践

    Vue.js最佳实践 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList() }, watch: { searchInputValue(){ t ...

  6. shell脚本之tr命令使用

    tr命令用来进行对标准输入的内容做替换.例如 # echo 'HELLO WORLD!!!' | tr "A-Z" "a-z" hello world!!! 这 ...

  7. android gradle jnilibs

    https://blog.csdn.net/xx326664162/article/details/51167849 [ABIXCPU] Android jniLibs下目录详解(.so文件) htt ...

  8. Lua 变量名词

    UpValue Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数.假设函数 ...

  9. ascii码值

    ascii码值#0 空值 即null#8 退格键#13 回车键

  10. 查找->静态查找表->分块查找(索引顺序表)

    文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...