深搜Dfs遍历节点以及寻路

2023-10-30

//深搜遍历从起点出发能走的所有节点
//对于一个节点,只要发现了没走过的点就走到它,如果有多个点可走就任选一个(递归调用)
//由于是从起点开始遍历,因此遍历过程也是产生路径的过程 ,因此深搜遍历是有路径信息的 ,单纯的根据数据结构遍历所有点是没有路径信息的 
Dfs(V)
{
	if(V是旧点) return ;
	将V标记为旧点;
	for U in 和V相邻的点 :
		if(满足能走的条件) // 不仅要考虑这两个点是不是连通的,还要考虑剪枝的条件限制,通过剪枝减少某些不必要路径(减少递归次数) 
			Dfs(U));
}
//深搜遍历图上所有节点,注意区分仅仅调用Dfs(V) 
while(能找到新节点K) 
{
	Dfs(K) ;
}


//深搜寻找从起点V到终点的最优路径 
Dfs(V)
{
	if(找到终点)
		判断是否为最优路径 
	for U in 和V相邻的点 :
		if(满足能走的条件) // 不仅要考虑这条路能不能走,还要考虑剪枝的条件限制,通过剪枝减少某些不必要路径(减少递归次数) 
		{
			//走V->U这条路 ,更新路径信息
			visited(V->U)=1;//标记为已经走过
			updateParam() ;
			//以U为起点继续走 
			Dfs(U));
			
			//重置走V->U这条路的路径信息,接下来尝试走其他和V相邻的点
			visited(V->U)=0;
			resetParam(); //上条语句走好了U->终点或不能走这条子路径,当我们在递归中加入这条语句后,在执行完这条语句后那条子路径就被删除了 
		}
}
  1. 若将深搜理解为扩展路径的一种递归算法,则可以从分解子问题递归的角度来理解
  2. 甚至可以将深搜理解为在递归的状态图,这个图上进行深搜 。这样的话,我们可以用Dfs这种搜索方法去写递归函数
  3. 剪枝:可行性剪枝:该方法判断继续搜索 能否 得出答案,如果不能直接回溯。例如要求得到x=x0,但按照当前情况继续递归下去x一定会 大于或者小于 x0,而不可能=x0,此时就不再继续 ;最优性剪枝:它记录当前得到的最优值,如果当前结点已经无法产生比当前最优解更优的解时,可以提前回溯。
  4. Dfs也是递归,因此Dfs也可以用动态规划 ,比如用一个数组存某个点的最优路径, 之后再走到这个点时就不用再运算了
  5. 深搜寻路时如何更快找到路径,简单点的理解可以看我的博客鸣人和佐助(老婆)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深搜Dfs遍历节点以及寻路 的相关文章

  • element中对el-input 自定义验证规则

    element中对el input 自定义验证规则 首先明确要使自定义校验生效的话 必须 prop 和 rules 的 键对应 如示例 prop description 在 rules 中有对应的键

随机推荐

  • git连接不到远程ssh,解决Unable to negotiate with **** port 22: no matching host key type found. Their offer:

    使用git链接远程push时ssh方式出错 连接失败 解决方法如下 参考文章 记一次使用git报错 解决Unable to negotiate with port 22 no matching host key type found The
  • 【python 6】Numpy

    文章目录 一 创建ndarry 1 使用 np array 由 python list 创建 2 使用np的常规函数创建 二 ndarry 的属性 三 ndarry 的基本操作 四 ndarry 的矩阵操作 Numpy 是python的数值
  • 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0

    我电脑的VS版本 1 问题1 找不到 Windows SDK 版本10 0 17134 0 请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择 重定解决方案目标 来更改 SDK 版本 2 出现问题的过
  • 数据结构之---C语言实现拓扑排序AOV图

    有向图的拓扑排序 杨鑫 include
  • React TypeScript

    1 安装 就像安装其他插件库一样 在项目文件夹下执行 npm install antd save 如果你安装了 yarn 也可以执行 yarn add antd 2 引用 import Button Tooltip from antd im
  • window下C语言中strtok函数的使用

    基础知识 原型 char strtok char str const char delim 功能 分解字符串为一组字符串 参数说明 str为要分解的字符串 delim为分隔符字符串 其中 str 不能用指针来存储 因为这个方法的本质是 找到
  • IOS 使用自定义View实现圆形布局(Swift)

    前面写过用安卓实现 还是同个需求 只不过现在需要做苹果版本 网上搜到了类似的案列点击打开链接只不过他的是用UICollectionView 跟我的需求有点不符合 没有搜到完全符合的案例 没办法自己写个 记录一下 也给有同种需求的童鞋填个坑
  • C#泛型List删除多个元素的方法

    泛型List如果删除一个 很简单 直接 RemoveAt index 即可 但如果有多个元素 那么删除起来并不是特别简单 需要使用 for 循环的倒叙删除 例子如下 class Program public class Students p
  • windows10安装linux环境

    Windows里玩转Linux 目标 一般的做法 神仙般的做法 可能会遇到的问题 目标 想要在windows里玩转linux 一般的做法 在windows里安装vmware或virtual box 新建一个虚拟机 在虚拟机里通过iso安装l
  • Python ttkbootstrap 制作账户注册信息界面

    前言 ttkbootstrap 是一个基于 tkinter 的界面美化库 使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序 ttkbootstrap 不仅有丰富的案例 同时还有完善的官方文档 可惜是英文的
  • 宽高都200px的div在浏览器窗口居中(水平垂直都居中)

    1 fixed 从中间移动定位 position fixed width 200px height 200px left 50 top 50 margin left 100px margin top 100px 第一行设置完 盒子的左上角的
  • 国茂股份全面迁移到亚马逊云科技,降本增效,驱动业务增长

    亚马逊云科技宣布 中国通用机械工业减速机行业的标杆企业江苏国茂股份有限公司 简称 国茂股份 正在全面迁移到亚马逊云科技 在中国大陆 西云数据运营宁夏区域 光环新网运营北京区域 将ERP 企业资源计划系统 APS 高级计划与排程系统 MES
  • Docker安装使用阿里云镜像

    registry mirrors https kfwkfulq mirror aliyuncs com https 2lqq34jg mirror aliyuncs com https pee6w651 mirror aliyuncs co
  • 【满分】【华为OD机试真题2023 JS】最小的调整次数

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最小的调整次数 知识点队列栈 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 有一个特异性的双端队列 该队列可以从头部或尾部添加数据 但是只能从头部移出数据 小A
  • dns服务器响应 异常,DNS云学堂|快速定位DNS解析异常问题,牢记这四种DNS状态码...

    DNS的状态码在进行故障排查的时候起着至关重要的作用 在DNS的维护中会经常遇到DNS解析异常问题 通过DNS的状态码可以初步判断DNS解析的异常问题 本期云学堂通过详解DNS状态码的定义 给出常见状态码的场景举例 enjoy 写在前面 本
  • (一)Matlab三日基础入门——矩阵和数组

    目录 创建数组 方式一 直接创建 方式二 调函数创建 zeros 功能 创建由0组成的数组 ones 功能 创建由1组成的数组 rand 功能 创建 0 1 之间均匀分布的随机数生成的数组 矩阵和数组运算 单一运算符 转置 行列互换 计算矩
  • [leetcode]刷题--关于位运算的几道题

    1 位运算的本质 其实是对二进制补码储存形式的修改 位运算常见的运算符为 lt lt 左移n个位置 算数移位 符号位不变 gt gt 右移动n个位置 采用直接丢弃末尾数字的方法 符号位不变 移位都是算数移位 按位取反 对于包括符号位在内全部
  • 两种公钥加密算法——Merkle-Hellman背包、RSA

    今天看了一些加密体制 很厉害 佩服之余顺便总结下公钥 对称密钥很多啊 历史比较有名的有DES AES RC系列 水平不够说不清楚 所以不写了 自己以后也要看 所以尽量通俗易懂 其实是不怎么会很官方很学术 顺道说 明天就七夕了 我还在搞些啥跟
  • ubuntu 20.04.4编译 继续尝试编译Android 12,13

    之前使用虚拟机编译过Android10 现在开始记录编译12 上次忘记给镜像了这次补上镜像ubuntu 20 04 4 desktop amd64 链接 https pan baidu com s 1REJ2cIJyqupLRQjN9SW0
  • 深搜Dfs遍历节点以及寻路

    深搜遍历从起点出发能走的所有节点 对于一个节点 只要发现了没走过的点就走到它 如果有多个点可走就任选一个 递归调用 由于是从起点开始遍历 因此遍历过程也是产生路径的过程 因此深搜遍历是有路径信息的 单纯的根据数据结构遍历所有点是没有路径信息