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 jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
js图片延迟加载的实现方法及思路
Jul 22 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
Angular2里获取(input file)上传文件的内容的方法
Sep 05 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 28 Javascript
详解vue3中组件的非兼容变更
Mar 03 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
PHP产生随机字符串函数
2006/12/06 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
jQuery实现本地存储
2020/12/22 jQuery
利用Psyco提升Python运行速度
2014/12/24 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python Tkinter版学生管理系统
2019/02/20 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
酒店人事专员岗位职责
2013/12/19 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
高三数学教学反思
2016/02/18 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
python实现批量移动文件
2021/04/05 Python