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 Js生成动态树实例代码
Sep 08 Javascript
犀利的js 函数集合
Jun 11 Javascript
基于jQuery的ajax功能实现web service的json转化
Aug 29 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
jQuery获得内容和属性方法及示例
Dec 02 Javascript
JS的get和set使用示例
Feb 20 Javascript
jQuery添加删除DOM元素方法详解
Jan 18 Javascript
javascript的理解及经典案例分析
May 20 Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 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 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
深入浅析php json 格式控制
2015/12/24 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
p5.js入门教程之键盘交互
2018/03/19 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
Python struct.unpack
2008/09/06 Python
python 正则式使用心得
2009/05/07 Python
Python利用ansible分发处理任务
2015/08/04 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
学生处主任岗位职责
2013/12/01 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers