• 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())
    

      

    相对应的还有:克鲁斯卡尔算法

  • 相关阅读:
    Java多线程设计模式(二)
    Java多线程设计模式(一)
    JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern
    JAVA并发设计模式学习笔记(一)—— JAVA多线程编程
    hibernate缓存机制(转载)
    web.xml中的contextConfigLocation的作用
    转:MAVEN常用命令
    eclipse 中添加自定义 classpath 的方法,以及 javac 和 java 的一些使用细节
    spring mvc 基于注解 配置默认 handlermapping
    viewport Meta Tag
  • 原文地址:https://www.cnblogs.com/muamaker/p/9230067.html
Copyright © 2020-2023  润新知