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 相关文章推荐
ext form 表单提交数据的方法小结
Aug 08 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
Feb 26 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
简单谈谈关于 npm 5.0 的新坑
Jun 08 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
js实现可以点击收缩或张开的悬浮窗
Sep 18 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
Jan 15 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 Javascript
vue接入腾讯防水墙代码
May 07 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 设计模式之观察者模式介绍
2012/02/22 PHP
php引用传值实例详解学习
2013/11/06 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
php扩展开发入门demo示例
2019/09/23 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
JS 字符串连接[性能比较]
2009/05/10 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
Python里disconnect UDP套接字的方法
2015/04/23 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
python中round函数如何使用
2020/06/19 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
2014小学数学教师个人工作总结
2014/12/18 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
2015入党自传格式范文
2015/06/26 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
golang 实现并发求和
2021/05/08 Golang