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 相关文章推荐
js玩一玩WSH吧
Feb 23 Javascript
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
jQuery验证Checkbox是否选中的代码 推荐
Sep 04 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
理解Javascript的call、apply
Dec 16 Javascript
Bootstrap风格的zTree右键菜单
Feb 17 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
Jun 28 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
Aug 10 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 Javascript
Vue中inheritAttrs的使用实例详解
Dec 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
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
微信支付开发维权通知实例
2016/07/12 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
vue组件三大核心概念图文详解
2019/05/30 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
公益广告标语
2014/06/19 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
会计入职心得体会
2016/01/22 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
MySQL的join buffer原理
2021/04/29 MySQL