码迷,mamicode.com
首页 > 编程语言 > 详细

js图的数据结构处理---迪杰斯特拉算法

时间:2018-06-25 12:47:29      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:更新   length   .com   贪心算法   div   min   var   image   new   

 

技术分享图片

 

 

		function Graph() {
			this.graph = [
				[0, 2, 4, 0, 0, 0],
				[0, 0, 1, 4, 2, 0],
				[0, 0, 0, 0, 3, 0],
				[0, 0, 0, 0, 0, 2],
				[0, 0, 0, 3, 0, 2],
				[0, 0, 0, 0, 0, 0]
			];
			//迪杰斯特拉算法---贪心算法
			this.dijkstra = function(src) {
				var dist = [],
					visited = [],
					length = this.graph.length;
				for(var i = 0; i < length; i++) {
					dist[i] = Infinity;
					visited[i] = false; // false表示未处理的顶点
				}
				dist[src] = 0; //初始化顶点与自己的距离是0
				for(var i = 0; i < length - 1; i++) {
					var u = minDistance(dist, visited);
					visited[u] = true;
					for(var v = 0; v < length; v++) {
						if(!visited[v] &&
							this.graph[u][v] != 0 && dist[u] != Infinity &&
							dist[u] + this.graph[u][v] < dist[v]) {
								//如果相邻的顶点,到这里的距离小于之前存的距离,则更新最小距离
							dist[v] = dist[u] + this.graph[u][v];
						}
					}
				}
				return dist;
			}

			function minDistance(dist, visited) {
				var min = Infinity,
					minIndex = -1;
				for(var v = 0; v < dist.length; v++) {
					if(visited[v] == false && dist[v] <= min) {
						min = dist[v];
						minIndex = v;
					}
				}
				return minIndex;
			}
		}

		var gf = new Graph();
		console.log(gf.dijkstra(0));
		
		//graph[u][v]  表示两个顶点的距离, 例如 graph[1][2],表示B-C的距离,如果是0表示没有连接
		
		//1、 初始化两个数组,dist表示各个点到指定点的距离,visited表示是否计算过该顶点周周围的顶点
		//2、找出未计算的,最小距离,将自己标记为已经计算,然后遍历其周围没有计算过的顶点
		//3、比较距离,更新距离
		
		//例如:
		//1、初始化一个顶点为A,然后找其他顶点与A的距离
		//此时:dist=[0,Infinity,Infinity,Infinity,Infinity,Infinity]
		//	   minDistance 计算出结果为 u = 0
		//     visited = [true,false,false,false,false,false]

		//2、 由于B和C都是未标记的,且距离是最小的,找到A的周围未标记的点B、C
		//此时: 	dist=[0,2,4,Infinity,Infinity,Infinity]
		//      minDistance 计算出结果为 u = 1  //开始找B周围的点
		//      visited = [true,true,false,false,false,false]
		
		//3、由于D、E、C都是未标记的,所以B周围能找到,D、E、C
		//如此重复操作,不断更新最小距离

  

 

js图的数据结构处理---迪杰斯特拉算法

标签:更新   length   .com   贪心算法   div   min   var   image   new   

原文地址:https://www.cnblogs.com/muamaker/p/9210379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!