JS实现深度优先搜索求解两点间最短路径


Posted in Javascript onJanuary 17, 2019

本文实例为大家分享了JS实现深度优先搜索求解两点间最短路径的具体代码,供大家参考,具体内容如下

效果:

找出图里点到点最短路径,并打印轨迹

图片如下所示:

JS实现深度优先搜索求解两点间最短路径

代码:

const map = [
  [0, 1, 1, 0, 1],
  [1, 0, 0, 1, 0],
  [1, 0, 0, 0, 1],
  [0, 1, 0, 0, 0],
  [1, 0, 1, 0, 0]
]

function dfsManager(map, start, end){

  var min = 9999,
    path = [],
    unvisited = [];
  for(let i=0; i<5;i++){
    unvisited[i] = true
  }

  (function dfs(map, start, end, step){
    //unvisited[start] = false //不重复访问最后的节点
    if(start === end){
      console.log('step:',step)
      for(let i=0; i<path.length; i++){
        if(path[i] >= 0){
          console.log(path[i]+'->')
        }
      }
      if(min > step){
        min = step
      }
      return
    }
    unvisited[start] = false  //要重复访问最后的节点
    let len = map.length

    for(let i=0; i<len; i++){
      if(map[start][i] === 1 && unvisited[i]){
        path.push(i)  //记录路径
        dfs(map, i, end, step+1)
        path.pop()   //避免污染其他路径
      }
    }
  })(map, start, end, 0)

  return min
}

console.log('min:',dfsManager(map,3,4))

output:

step: 4
1->
0->
2->
4->
step: 3
1->
0->
4->
min: 3

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

Javascript 相关文章推荐
JavaScript 模拟用户单击事件
Dec 31 Javascript
js对象继承之原型链继承实例
Jan 10 Javascript
AngularJS表格详解及示例代码
Aug 17 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
JS实现双击内容变为可编辑状态
Mar 03 Javascript
vue父子组件的嵌套的示例代码
Sep 08 Javascript
常用的9个JavaScript图表库详解
Dec 19 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
Apr 05 Javascript
解决eclipse中没有js代码提示的问题
Oct 10 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
JavaScript实现星级评价效果
May 17 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 #Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 #Javascript
vue权限管理系统的实现代码
Jan 17 #Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 #Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 #Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 #Javascript
nvm、nrm、npm 安装和使用详解(小结)
Jan 17 #Javascript
You might like
PHP脚本的10个技巧(7)
2006/10/09 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
解密效果
2006/06/23 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
怎么清空javascript数组
2013/05/11 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
Flask框架WTForm表单用法示例
2018/07/20 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
python实现停车管理系统
2018/11/30 Python
python实现电子产品商店
2019/02/26 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
python中的unittest框架实例详解
2021/02/05 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
工商局调档介绍信
2015/10/22 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
Java8中Stream的一些神操作
2021/11/02 Java/Android
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技