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 相关文章推荐
获取HTML DOM节点元素的方法的总结
Aug 21 Javascript
jMessageBox 基于jQuery的窗口插件
Dec 09 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
百度地图自定义控件分享
Mar 04 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
JS代码检查工具ESLint介绍与使用方法
Feb 04 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 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检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
utf8的编码算法 转载
2006/12/27 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
JS继承用法实例分析
2015/02/05 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
js实现简单页面全屏
2019/09/17 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
Python实现合并两个列表的方法分析
2018/05/28 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python中print和return的作用及区别解析
2019/05/05 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
初中军训感想300字
2014/03/05 职场文书
员工试用期自我评价
2014/09/18 职场文书
2015年销售助理工作总结
2015/05/11 职场文书