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常见表单应用技巧
Jan 09 Javascript
javascript firefox不显示本地预览图片问题的解决方法
Nov 12 Javascript
js 小数取整的函数
May 10 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
Javascript检查图片大小不要让大图片撑破页面
Nov 04 Javascript
原生javascript实现匀速运动动画效果
Feb 26 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
如何获取元素的最终background-color
Feb 06 Javascript
js实现本地时间同步功能
Aug 26 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
Dec 18 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
javascript 内存模型实例详解
Apr 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 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php bootstrap实现简单登录
2016/03/08 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
django实现分页的方法
2015/05/26 Python
使用python实现个性化词云的方法
2017/06/16 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
自我反省检讨书
2014/01/23 职场文书
主题教育活动总结
2014/05/05 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
5道关于python基础 while循环练习题
2021/11/27 Python
SQL Server Agent 服务无法启动
2022/04/20 SQL Server