js回溯法计算最佳旅行线路代码实例

 更新时间:2019年09月11日 10:30:43   作者:muamaker  
这篇文章主要介绍了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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例

    微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例

    这篇文章主要介绍了微信小程序实现swiper切换卡内嵌滚动条不显示的方法,涉及微信小程序swiper选项卡组件相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • JS错误处理与调试操作实例分析

    JS错误处理与调试操作实例分析

    这篇文章主要介绍了JS错误处理与调试操作,结合实例形式分析了JavaScript错误捕获、处理、调试工具、断点调试等相关操作技巧,需要的朋友可以参考下
    2020-04-04
  • js+html+css实现简单电子时钟

    js+html+css实现简单电子时钟

    这篇文章主要为大家详细介绍了js+html+css实现简单电子时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • javascript实现秒表计时器的制作方法

    javascript实现秒表计时器的制作方法

    这篇文章主要为大家详细介绍了javascript实现秒表计时器的制作方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • JavaScript图片处理与合成总结

    JavaScript图片处理与合成总结

    这篇文章主要介绍了JavaScript图片处理与合成的相关知识点以及相关实例代码分析,有兴趣的朋友学习下。
    2018-03-03
  • jQuery实现可收缩展开的级联菜单实例代码

    jQuery实现可收缩展开的级联菜单实例代码

    这篇文章主要是对利用jQuery实现可收缩展开的级联菜单的实例代码进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • JS实现添加缓动画的方法

    JS实现添加缓动画的方法

    这篇文章主要为大家详细介绍了JS实现添加缓动画的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • javascript五图轮播切换实用版

    javascript五图轮播切换实用版

    今天发表一个自己刚学js的练习,javascript五图轮播切换---实用版,这个实力有个缺陷就是没有过渡效果,这个本人也还在研究中,也希望高手可以指点一下
    2012-08-08
  • js实现五星评价功能

    js实现五星评价功能

    本文主要介绍了js实现五星评价功能和印象评价功能的实例,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • JS中关于正则的巧妙操作

    JS中关于正则的巧妙操作

    本文通过实例代码给大家介绍了javascript中关于正则表达式的巧妙操作技巧,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-08-08

最新评论