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 调整select 位置的函数
Feb 21 Javascript
js自执行函数的几种不同写法的比较
Aug 16 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 Javascript
JS判断两个时间大小的示例代码
Jan 28 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
整理关于Bootstrap警示框的慕课笔记
Mar 29 Javascript
为你的微信小程序体积瘦身详解
May 20 Javascript
聊聊Vue.js的template编译的问题
Oct 09 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
vue路由教程之静态路由
Sep 03 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
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
js jquery数组介绍
2012/07/15 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
Python读取csv文件分隔符设置方法
2019/01/14 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
SQL SERVER面试资料
2013/03/30 面试题
外贸业务员求职信范文
2013/12/12 职场文书
还款承诺书范文
2014/05/20 职场文书
承诺书格式
2014/06/03 职场文书
献爱心标语
2014/06/21 职场文书
大学四年个人总结
2015/03/03 职场文书
大学团日活动总结书
2015/05/11 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
队列队形口号
2015/12/25 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
redis protocol通信协议及使用详解
2022/07/15 Redis