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中的call实现继承
Jan 22 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
Sep 01 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
JS延时器提示框的应用实例代码解析
Apr 27 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
JavaScript实现二分查找实例代码
Feb 22 Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 Javascript
JS回调函数 callback的理解与使用案例分析
Sep 09 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
Javascript事件实例详解
2013/11/06 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Python中优化NumPy包使用性能的教程
2015/04/23 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python对象转JSON字符串的方法
2016/04/27 Python
Python中的默认参数实例分析
2018/01/29 Python
python实现抖音视频批量下载
2018/06/20 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
授权委托书样本
2014/04/03 职场文书
政风行风建设责任书
2014/07/23 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
司考复习计划
2015/01/19 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
html实现弹窗的实例
2021/06/09 HTML / CSS