博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用js简单实现一下迪克斯特拉算法
阅读量:5242 次
发布时间:2019-06-14

本文共 2114 字,大约阅读时间需要 7 分钟。

今天看书看到了迪克斯特拉算法,大概用js实现一下呢,计算最短路径。

首先,迪克斯特拉算法只适用于有向无环图,且没有负权重,本例关系图如下哦,数字为权重,emmmm,画得稍微有点丑~

 

     //大概用js实现一下迪克斯特拉算法,计算最短路径        // (6)→ A → (1)        //   ↑    ↑    ↓        // 起点  (3)  终点        //   ↓    ↑    ↑        //  (2) → B → (5)        //迪克斯特拉算法只适用于有向无环图,且没有负权重        //上图()内为权重        //散列表在js中表示为对象        var graph = {};//记录节点        graph.start = {};        graph.start.a = 6;//起点到达A点权重为6        graph.start.b = 2;        graph.a = {};        graph.a.end = 1;        graph.b = {};        graph.b.end = 5;        graph.b.a = 3;        graph.end = {};        var costs = {};//记录起点到各点权重        costs.a = 6;        costs.b = 2;        costs.end = '';//暂时不知道        var parents = {};//记录最短路径中各节点的父节点        parents.a = 'start';        parents.b = 'start';        parents.end = '';        var processed = {};//记录已处理过的节点                //找出开销最小的节点(方法比较多呢,随便写了一个)        function findLowestCostNode(costs) {            var value = '';            var node = '';            for(var key in costs) {                if(processed[key]) {                    continue;                }                if(!value) {                    value = costs[key];                    node = key;                }else {                    if(costs[key] && costs[key]
newCost) {
//检查相应节点开销数是否小于已知开销数 costs[n] = newCost;//更新相应节点开销数 parents[n] = node;//更新相应节点父节点 } } } processed[node] = 1;;//记录已处理过节点 node = findLowestCostNode(costs);//更新最小节点继续循环 } console.log(costs['end']);//6 此处为最短路径开销 var line = []; line.unshift('end'); printLine(parents['end']); console.log(line);//["start", "b", "a", "end"] //使用递归打印出完整路径 function printLine(node) { if( node != 'start') { line.unshift(node); printLine(parents[node]); }else { line.unshift('start'); } }

看过的东西不使用就容易忘记,稍微记录一下,写法比较小白,大神们就自动忽略吧~

知道了新东西还真是一件有意思的事情~

转载于:https://www.cnblogs.com/cici-seven/p/9970190.html

你可能感兴趣的文章
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
React Router 4.0 基本使用
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
CDN 学习笔记
查看>>
电子眼抓拍大解密
查看>>
多线程---线程间的通信
查看>>
poj 1331 Multiply
查看>>
严重: 文档无效: 找不到语法。 at (null:2:19)
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
nodejs-Path模块
查看>>
P1107 最大整数
查看>>
EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器...
查看>>
监控CPU和内存的使用
查看>>
Ubuntu14.04设置开机自启动程序
查看>>
ios app 单元测试 自动化测试
查看>>
强连通tarjan模版
查看>>
javascript_09-数组
查看>>