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 相关文章推荐
用JQuery调用Session的实现代码
Oct 29 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
图片无缝滚动代码(向左/向下/向上)
Apr 10 Javascript
基于javascript 闭包基础分享
Jul 10 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
使用jquery实现仿百度自动补全特效
Jul 23 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
JS实现显示当前日期的实例代码
Jul 03 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
树结构之JavaScript
2017/01/24 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python中的yield浅析
2014/06/16 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python实现决策树分类(2)
2018/08/30 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python Selenium参数配置方法解析
2020/01/19 Python
pytorch SENet实现案例
2020/06/24 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
工程专业求职自荐书范文
2014/02/18 职场文书
《长相思》听课反思
2014/04/10 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript