js回溯法计算最佳旅行线路代码实例


Posted in Javascript onSeptember 11, 2019

回溯法

js回溯法计算最佳旅行线路代码实例

假如有 A,B,C,D四个城市,他们之间的距离用 G[V][E] 表示,为 无穷大,则表示两座城市不相通

现在从计算从某一个城市出发,把所有的城市不重复旅行一次,最短路径

其中G为: (Infinity表示城市不相通)

var g = [
  [Infinity,3    ,Infinity,8    ,9],
  [ 3   ,Infinity,3    ,10   ,5],
  [Infinity, 3   ,Infinity,4    ,3],
  [8    ,10   ,4    ,Infinity,20],
  [9    ,5    ,3    ,20   ,Infinity]
]

分析,如果确定从 A城市开始,则需要探索 剩下的几个城市,剩下的几个城市再往里探索,如果失败了,就废弃,回到之前的状态

var g = [
    [Infinity,3    ,Infinity,8    ,9],
    [ 3   ,Infinity,3    ,10   ,5],
    [Infinity, 3   ,Infinity,4    ,3],
    [8    ,10   ,4    ,Infinity,20],
    [9    ,5    ,3    ,20   ,Infinity]
  ]
 
  var x = [0,1,2,3,4]; //城市的编号
  var cl = 0;     //规划过程中记录的距离
  var bestl = Infinity; //当前最优解
  var bestx = [0,0,0,0,0]; //当前最优解的路径
  //var t = 0; //当前需要到达的城市
  var n = x.length-1;
  function Traveling(t){
    if(t > n ){
      //搜索到底部,如果满足最优解则记录
      if(g[x[n]][0] < Infinity && (cl + g[x[n]][0] < bestl)){
        for(var j = 0; j <= n; j++){
          bestx[j] = x[j];
        }
        bestl = cl + g[x[n]][0];
      }
    }else{
      for(var j = t ; j <= n; j++){
        if(g[x[t-1]][x[j]] < Infinity && (cl + g[x[t-1]][x[j]] < bestl )){
          swap(x,t,j);        //交换位置,将j点作为 当前需要到达的城市
          cl = cl + g[x[t-1]][x[t]]; //加上选中的点
          Traveling(t+1);       //搜索下一下节点
          cl = cl - g[x[t-1]][x[t]]; //还原搜索之前
          swap(x,t,j);        //还原
        }
      }
    }
  }  
  function swap(arr,x,y){
    var temp = arr[x];
    arr[x] = arr[y];
    arr[y] = temp;
  }   
  Traveling(1);
  console.log(bestx);
  console.log(bestl)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery ul标签下拉菜单演示代码
Dec 11 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
Apr 20 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
js 判断文件类型并控制表单提交示例代码
Nov 14 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
详解javascript数组去重问题
Nov 06 Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
Jul 19 Javascript
Javascript作用域和作用域链原理解析
Mar 03 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 Javascript
vue基于Teleport实现Modal组件
May 31 Vue.js
layer更改皮肤的实现方法
Sep 11 #Javascript
node 解析图片二维码的内容代码实例
Sep 11 #Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
Sep 11 #Javascript
如何解决日期函数new Date()浏览器兼容性问题
Sep 11 #Javascript
JS中封装axios来管控api的2种方式
Sep 11 #Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
Sep 11 #Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 #Javascript
You might like
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP学习记录之数组函数
2018/06/01 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Dojo 学习要点
2010/09/03 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
python实现电子词典
2020/04/23 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
nohup的用法
2014/08/10 面试题
Python如何定义一个函数
2015/09/01 面试题
学习委员自我鉴定
2014/01/13 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
python实现进度条的多种实现
2021/04/29 Python
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技