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下给元素添加事件的方法与代码
Aug 13 Javascript
Javascript 面试题随笔
Mar 31 Javascript
Javascript继承(上)——对象构建介绍
Nov 08 Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 Javascript
JS实现的左侧竖向滑动菜单效果代码
Oct 19 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
必备的JS调试技巧汇总
Jul 20 Javascript
在网页中插入百度地图的步骤详解
Dec 02 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
Dec 14 Javascript
Vue表单输入绑定的示例代码
Nov 01 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 Javascript
vue中实现图片压缩 file文件的方法
May 28 Javascript
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脚本的10个技巧(3)
2006/10/09 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
javascript json2 使用方法
2010/03/16 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
python访问系统环境变量的方法
2015/04/29 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Python同时迭代多个序列的方法
2020/07/28 Python
python缩进长度是否统一
2020/08/02 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
软件售后服务承诺书
2014/05/21 职场文书