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 (二) 万能的选择器
Oct 01 Javascript
使用jquery插件实现图片延迟加载技术详细说明
Mar 12 Javascript
jquery通过visible来判断标签是否显示或隐藏
May 08 Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 Javascript
jQuery/CSS3图片特效插件整理推荐
Dec 07 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
微信小程序之数据缓存的实例详解
Sep 29 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
JS中appendChild追加子节点无效的解决方法
Oct 14 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 Javascript
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
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类的自动加载操作实例详解
2016/09/28 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
srcElement表格样式
2006/09/03 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
vue开发中遇到的问题总结
2020/04/07 Javascript
Vue实现手机计算器
2020/08/17 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python检测网站链接是否已存在
2016/04/07 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
Python装饰器语法糖
2019/01/02 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android