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]
];
var vertices = ["A","B","C","D","E","F"];
//弗洛伊德算法
this.floydWarshall = function(){
var dist = [],
prev = [],
length = this.graph.length,
i,j,k; for(var i = 0 ; i < length; i++){
dist[i] = []; for(var j = 0; j < length; j++){
dist[i][j] = this.graph[i][j];
if( dist[i][j] == 0 && i !== j){
//将不通的路,设置为无穷大
dist[i][j] = Infinity;
}
}
} for (k = 0; k < length; k++) {//起点
prev[k] = {};
prev[k][vertices[k]] = null;
for (i = 0; i < length; i++) {//中间点
for (j = 0; j < length; j++) {//结束点
if (dist[k][i] + dist[i][j] < dist[k][j]) {
//dist[k][i] 相通
//dist[i][j] 也相通
//dist[k][j] 一定相通
//Infinity + Infinity == Infinity -> true
dist[k][j] = dist[k][i] + dist[i][j]; prev[k][vertices[j]] = vertices[i]; //记录前溯点
}
}
}
}
return {
dist:dist,
prev:prev
};
} this.path = function(){
var predecessorsArr = this.floydWarshall()['prev']; for(var i = 0; i < predecessorsArr.length; i++){
console.log(getPath(predecessorsArr[i]));
} } function getPath(predecessors){ var paths = [];
for(var i = 0; i < vertices.length; i++){
var toVertex = vertices[i],
path = [];
while(toVertex){
path.push(toVertex);
toVertex = predecessors[toVertex];
} var s = path.join('-');
paths.push(s);
}
return paths;
}
} var graph = new Graph();
console.log(graph.floydWarshall());
graph.path();
//弗洛伊德算法
//1、把dist数组初始化为每个顶点之间的权值,因为i到j可能的最短距离就是这些顶点间的权值
//2、例如当: k为A,i为B,j为D,则判断 AB + BD < AD,这里有点像向量,实际上就是找路径的中间点,如果更小,就赋值
//3、其中,为了求AD的最小距离,就不断找 AD之间的其他点,相加的最小距离 //对图中每一个顶点执行Dijkstra(迪杰斯特拉)算法,也可以得到相同的结果

  

js图的数据结构处理---弗洛伊德算法的更多相关文章

  1. js图的数据结构处理----普里姆算法

    //求加权无向连通图的MST的贪心算法 //最小树,最小路径联通各个点 function PRIM(){ var graph = [ [], [undefined,Infinity, 23 ,Infi ...

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

    /*//1.确定数据结构, mapf[i][j] 为点i到点j的距离 [ Infinity 2 5 Infinity Infinity Infinity Infinity 2 6 Infinity I ...

  3. js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑

    //邻居连表 //先加入各顶点,然后加入边 //队列 var Queue = (function(){ var item = new WeakMap(); class Queue{ construct ...

  4. [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现

    在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...

  5. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  6. js学习之数据结构和算法

    js中的数据结构 1.列表 待办事项列表.购物清单.最佳十名榜单等等. 适用: 1)数据结构较为简单, 2)不需要在一个长序列中查找元素,或者对其进行排序 2.栈 一摞盘子 ----- 添加删除只能从 ...

  7. 图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP

    文转:http://blog.csdn.net/zxq2574043697/article/details/9451887 一: 最短路径算法 1. 迪杰斯特拉算法 2. 弗洛伊德算法 二: 1. 迪 ...

  8. Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

  9. 经典问题----最短路径(Floyd弗洛伊德算法)(HDU2066)

    问题简介: 给定T条路,S个起点,D个终点,求最短的起点到终点的距离. 思路简介: 弗洛伊德算法即先以a作为中转点,再以a.b作为中转点,直到所有的点都做过中转点,求得所有点到其他点的最短路径,Flo ...

随机推荐

  1. 7:CSS Sprites的原理(图片整合技术)

    7:CSS Sprites的原理(图片整合技术) 一.将导航背景图片,按钮背景图片等有规则的合并成一张背景图,即将多张图片合为一张整图,然后用background-position”来实现背景图片的定 ...

  2. Django----djagorestframwork使用

    restful(表者征状态转移,面向资源编程)------------------------------------------->约定 从资源的角度审视整个网络,将分布在网络中某个节点的资源 ...

  3. webuploader 跨域上传demo(还没有写记录一下)

    webuploader 跨域上传demo(还没有写记录一下)

  4. CH6201 走廊泼水节【最小生成树】

    6201 走廊泼水节 0x60「图论」例题 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我 ...

  5. [No0000B6]C#中 ==与equals的区别

    using System; internal class Person { public Person(string name) { Name = name; } public string Name ...

  6. 请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

    答:执行顺序:静态初始化块->初始化块->构造函数 静态初始化块:在第一次加载类时执行,与对象的创建无关. 构造代码块:在调用构造方法时执行. 构造函数:在调用构造函数时执行.

  7. D. Who killed Cock Robin 湖北省大学程序设计竞赛

    链接:https://www.nowcoder.com/acm/contest/104/C来源:牛客网 The Sparrow is for trial, at next bird assizes,w ...

  8. Server:www121 Server:www120 Server:NWS_SP

    Request URL:http://www.biyao.com/minisite/bzzx Request Method:GET Status Code:200 OK Remote Address: ...

  9. Flink – CEP NFA

    看看Flink cep如何将pattern转换为NFA? 当来了一条event,如果在NFA中执行的? 前面的链路,CEP –> PatternStream –> select –> ...

  10. 基于external version进行乐观锁并发控制

    ?version=1?version=1&version_type=external它们的唯一区别在于,_version,只有当你提供的version与es中的_version一模一样的时候, ...