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 贪吃蛇实现代码
Nov 22 Javascript
JQuery从头学起第一讲
Jul 04 Javascript
不同浏览器的怪癖小结
Jul 11 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
Mar 27 Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 Javascript
JavaScript学习笔记之Function对象
Jan 22 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
May 15 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
Feb 16 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
Mar 14 Javascript
浅析Vue 和微信小程序的区别、比较
Aug 03 Javascript
react用Redux中央仓库实现一个todolist
Sep 29 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
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扩展imagick
2014/06/02 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
让Python代码更快运行的5种方法
2015/06/21 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
群众路线教育党课主持词
2014/04/01 职场文书
自主招生教师推荐信
2014/05/10 职场文书
学籍证明模板
2014/11/21 职场文书
学生评语集锦
2015/01/04 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
机关保密工作承诺书
2015/05/04 职场文书
单位车辆管理制度
2015/08/05 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers