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 相关文章推荐
如何创建一个JavaScript弹出DIV窗口层的效果
Sep 25 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
Jquery组件easyUi实现表单验证示例
Aug 23 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 Javascript
vue 之 .sync 修饰符示例详解
Apr 21 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
Aug 29 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 Javascript
Vue可自定义tab组件用法实例
Oct 24 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 Javascript
一篇文章学会Vue中间件管道
Jun 20 Vue.js
vue实现登陆页面开发实践
May 30 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
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
Python程序语言快速上手教程
2012/07/18 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
教师推荐信范文
2013/11/24 职场文书
领导党性分析材料
2014/02/15 职场文书
2014年会策划方案
2014/05/11 职场文书
法制宣传口号
2014/06/16 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
李白故里导游词
2015/02/12 职场文书
学校百日安全活动总结
2015/05/07 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫