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动态调整TextArea高度的代码
Dec 28 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
在Ubuntu上安装最新版本的Node.js
Jul 14 Javascript
Javascript中call与apply的学习笔记
Sep 22 Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 Javascript
初识Node.js
Mar 20 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 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
微信公众平台DEMO(PHP)
2016/05/04 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
Javascript操作select控件代码实例
2020/02/14 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
python实现调用其他python脚本的方法
2014/10/05 Python
python集合用法实例分析
2015/05/30 Python
让Python代码更快运行的5种方法
2015/06/21 Python
Python 实现简单的电话本功能
2015/08/09 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
开门红主持词
2014/04/02 职场文书
活动总结怎么写
2014/04/28 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL