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 相关文章推荐
一个可以随意添加多个序列的tag函数
Jul 21 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
Sep 22 Javascript
vue 挂载路由到头部导航的方法
Nov 13 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 Javascript
react native 原生模块桥接的简单说明小结
Feb 26 Javascript
nestjs返回给前端数据格式的封装实现
Feb 22 Javascript
使用vuex-persistedstate本地存储vuex
Apr 29 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中多维数组按指定value排序的实现代码
2014/08/19 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
python运行其他程序的实现方法
2017/07/14 Python
python实现画圆功能
2018/01/25 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
十佳青年个人事迹材料
2014/01/28 职场文书
学校招生宣传广告词
2014/03/19 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
2014年教研室工作总结
2014/12/06 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
导游词之天津盘山
2019/11/01 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python