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

/*//1、确定数据结构, mapf[i][j] 为点i到点j的距离
[
Infinity 2 5 Infinity Infinity
Infinity Infinity 2 6 Infinity
Infinity Infinity Infinity 7 1
Infinity Infinity 2 Infinity 4
Infinity Infinity Infinity Infinity Infinity
]; //2、如果源点为1,则 s = {1}, 则 v-s = {2,3,4,5}; s为已经规划好的点,v-s是需要规划的点
var dist = []; //dist[i] = mapf[1][i];dist[1] = 0;
//源点1到i有边相连,初始化前驱为1(源点为前驱),否则初始化为-1
var p = [-1,1,1,-1,-1]; //3、找到 v-s = {2,3,4,5}集合里面,到源点1,最近的点
//得出结果为2,节点为 t = 2,则 v-s={3、4、5},s={1、2}; //4、借道t=2,所有t的相邻点,借道t;例如相邻点3,则 a = dist[2] + maf[2][3]; b = dist[3];
//两个取较小值,得a < b; 2-3为捷径,则记录下dist[3] = a;记录下3的前驱点 p[3] = 2;
//经过第4步,计算了2的相邻点,3、4; //5、比较v-s={3、4、5}的到源点的最近距离,即是 v-s={3、4、5}时,执行第3步,此时相当于源点为2会再次得出最小 t //6、重复 3、4、5步*/ function Dijkstra(){
//初始化构造一个集合,mapt[i][j]为点i到j的距离,不通的为无穷大
var mapt = [
[undefined,undefined,undefined,undefined,undefined,undefined],
[undefined,Infinity,2,5,Infinity,Infinity],
[undefined,Infinity,Infinity,2,6,Infinity],
[undefined,Infinity,Infinity,Infinity,7,1],
[undefined,Infinity,Infinity,2,Infinity,4],
[undefined,Infinity,Infinity,Infinity,Infinity,Infinity],
]; var n = mapt.length - 1;
//开始计算
this.dijkstra = function(u){ //u为源点
var dist = []; //dist[i]为点i到y的最短距离
var p = []; //p[i] 为点i的前溯点
var flag = []; //flag[i] 是否已经加入 s集合 //初始化数据 dist,p,flag
for(var i = 1; i <= n; i++){
dist[i] = mapt[u][i]; //从源点到i的距离
if(dist[i] == Infinity){ //前溯点如果不通过为-1
p[i] = -1;
}else{
p[i] = u;
} flag[i] = false; //都没有选中
} flag[u] = true; //选择了源点,s集合只有 u for(var i = 1; i <= n; i++){
var t = u; var temp = Infinity;
for(var j = 1; j <= n ; j++){ //获取dist里面,v-s集合的最短距离
if(!flag[j] && dist[j] <= temp){
temp = dist[j];
t = j;
}
} //查看是否找到最短的距离
if(t == u){
return {
dist:dist,
p:p
};
} //找到了,将t加入集合 s
flag[t] = true; for(var k = 1 ; k <= n; k++){ //以t为捷径点(t为前溯点),寻找所有满足条件的点
if(!flag[k] && mapt[t][k] < Infinity ){
if(dist[k] > (dist[t] + mapt[t][k])){
dist[k] = dist[t] + mapt[t][k]; //源点到k的距离 > 源点到t的距离 + t到k的距离
p[k] = t;
}
}
}
} return {
dist:dist,
p:p
} } this.getpath = function(u){
var process = this.dijkstra(u);
var dist = process.dist;
var p = process.p;
for(var i = 1; i <= n; i++){
var start = i;
var str = i;
while(start != -1){
start = p[start]; //迭代出路径
if(start != -1){
str = str + '、' + start;
}
}
console.log(str);
}
} } var Dijk = new Dijkstra();
//console.log(Dijk.dijkstra(1));
console.log(Dijk.getpath(1));
js图的数据结构处理---迪杰斯特拉算法的更多相关文章
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现
在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...
- 图-最短路径-Dijktra(迪杰斯特拉)算法
1. 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉算法于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始 ...
- 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)
文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...
- 图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP
文转:http://blog.csdn.net/zxq2574043697/article/details/9451887 一: 最短路径算法 1. 迪杰斯特拉算法 2. 弗洛伊德算法 二: 1. 迪 ...
- 数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)
今天做的最多的事情就是纠错了,通过添加输出语句判断错误来源: 找到错误来源: wb = new XSSFWorkbook(input);//语句创建错误 网上查询发现是jar包的问题: 下图为poi的 ...
- 迪杰斯特拉算法c语言实现
/*http://1wangxiaobo@163.com 数据结构C语言版 迪杰斯特拉算法 P189 http://1wangxiaobo@163.com 编译环境:Dev-C++ 4.9.9.2 ...
- 最短路问题:迪杰斯特拉算法(Dijsktra)
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
随机推荐
- ifnull与nvl
mysql 用 ifnull ,oracle没有ifnull 但是有相应的替换函数 nvl NVL(eExpression1, eExpression2)
- bootstrap-switch 使用
网址:http://www.bootcss.com/p/bootstrap-switch/ 界面设置不调用方法没成功,事件也不起作用不知道是jquery版本原因还是什么原因!,下面亲测试可以使用 $( ...
- hdu4763 Theme Section【next数组应用】
Theme Section Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}
前端之前端初识 前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...
- Sticks POJ - 1011 少林神棍 dfs四次剪枝
http://poj.org/problem?id=1011 题意:若干根棍子被截成小段的木棒,现在给你这些木棒,问最短可以拼出的棍子长度. 题解:搜索,dfs(r,m) 二个参数分别代表还剩r个木棒 ...
- SQL Server 2008 事件探查器(SQL SERVER Profiler)
要想很好地优化ERP系统,可以从客户端.服务器.网络等入手,对于我们M1系统的优化来说,SQL 语句的优化就起到很重要的作用了.为此,我们展开,学习了SQL SERVER 2008的事件探查器(SQL ...
- windows Git Bash 无法运行python解决方法
以前运行cmd命令都是在cmd里面的,但是那个页面实在是太丑了,后面我就全部用git bash来运行window下的命令了. 但是在git bash 中运行下python – -version 或 p ...
- [development][libhtp] libhtp 启用debug模式
可以使用 ./configure --help 查看帮助. 可以通过参数, 修改配置. 即对应的Makefile内容. 也可以修改 configure.ac 里的内容, help中的部分内容, 也依赖 ...
- 查找->静态查找表->顺序查找(顺序表)
文字描述 顺序查找的查找过程为:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录:反之,若直至第一个记录,其关键字和给定值比较都 ...
- Pytorch安装教程
一.准备 Window10系统+Ubuntu16.10系统.Anaconda3.5(python3.6) 二.流程 (1)由于墙的问题,用conda安装Pytorch过程中会连接失败,这是因为Anac ...