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 位置插件
Dec 25 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
Feb 11 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
Angularjs手动解析表达式($parse)
Oct 12 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
Bootstrap Table 搜索框和查询功能
Nov 30 Javascript
微信小程序textarea层级过高的解决方法
Mar 04 Javascript
JS块级作用域和私有变量实例分析
May 11 Javascript
Vue发布订阅模式实现过程图解
Apr 30 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 echo 输出字符串函数详解
2010/05/13 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
php截取字符串函数分享
2015/02/02 PHP
php常量详细解析
2015/10/27 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
网站上面有这种切换效果
2006/06/26 Javascript
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
python logging设置level失败的解决方法
2020/02/19 Python
python中的列表和元组区别分析
2020/12/30 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
数据库方面面试题
2012/04/22 面试题
如何转换一个字符串到enum值
2014/04/12 面试题
关于人生的感言
2014/01/17 职场文书
公司合作意向书
2014/04/01 职场文书
英语教师求职信
2014/06/16 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
档案工作汇报材料
2014/08/21 职场文书
交通事故和解协议书
2015/01/27 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript