基本思想

如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。在深度优先搜索中,对于当前发现的结点,如果它还存在以此结点为起点而未探测到的边,就沿此边继续搜索下去,若当结点的所有边都己被探寻过.将回溯到当前结点的父结点,继续上述的搜索过程直到所有结点都被探寻为止。

深度优先搜索在树的遍历中也称作树的先序遍历。对于树而言,深度优先搜索的思路可以描述为:

(1)将根结点置为出发结点。

(2)访问该出发结点.

(3)依次将出发结点的子结点置为新的出发结点.进行深度优先遍历(执行(2))。

(4)退回上一层的出发结点。

基本框架:(回溯递归实现)

框架一

void dfs(int k) {for (i = 1; i <= 子状态数; i++) {//产生式if (满足条件) { //扩展条件保存结果;if (到达目的地) {//目标状态输出解;}else {dfs(k+1);}恢复: 保存结果之前的状态 { 回溯 }}}
}

框架二

void dfs(int k) {if (到达目的地) { //目标状态输出解;}else{for (int i = 1; i <= 子状态数; i++) {//产生式if (满足条件) {//扩展条件保存结果;dfs(k+1);恢复: 保存结果之前的状态 (回溯 )}}}
}

模板很简单吧,是不是就是一个 N 叉树的遍历?你可以理解为,回溯算法相当于一个决策过程,递归地遍历一棵决策树,穷举所有的决策,同时把符合条件的决策挑出来。举个例子,假如你要吃饭,但是去哪里吃,然后具体吃什么呢?这是个决策问题,而且不太容易,因为选择实在太多了,如下图。

作为人类,可以很直观的知道自己要干嘛,比如在A,要去F吃饭,很容易直观就知道A-C-F这样的路径,但是计算机呢?计算机要穷举所有可能性,挑出满足条件的路径,才能达到目的。如何让计算机正确地穷举并比较所有决策路径,就需要回溯算法的设计技巧了,回溯算法的核心就在于如何设计 状态节点 和 产生式 部分的逻辑。

深度优先搜索 详解(C++)相关推荐

  1. c++深度优先搜索详解

    目录 哈喽 dfs乃何物? DFS算法过程: dfs基本框架 题目1 代码 题目2 n-皇后问题 代码 寻路 代码 最后 哈喽 各位好 晚上从沙发上起来,端坐在电脑前 我大抵是无聊了 思前想后,我还是 ...

  2. 深度优先搜索详解 C++实现

    DFS 全文大概四千字左右,如果您初学DFS相信会对您会有很大的帮助,能力有限,很多术语不够专业,理解万岁 二叉树的深度优先搜索 二叉树的概念这里就不细谈了 使用数组来存储二叉树,根结点从1开始(方便 ...

  3. ElasticSearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解...

    墨墨导读:之前我们分享了ElasticSearch最全详细使用教程:入门.索引管理.映射详解,本文详细介绍ElasticSearch的索引别名.分词器.文档管理.路由.搜索详解. 一.索引别名 1. ...

  4. 深度优先搜索Or深度优先遍历详解

    学习过程中发现这篇文章写得特别好,立转 深度优先搜索(DFS, Depth First Search)是一个针对图和树的遍历算法.早在19世纪就被用于解决迷宫问题. 对于下面的树而言,DFS方法首先从 ...

  5. elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  6. Firefox 2010:火狐魔镜搜索详解

    (本文由北京谋智网络技术有限公司提供) 近日,火狐中国版2010.1发布了,此版本的一大特色是:火狐魔镜v3.本文跟大家介绍一下在火狐魔镜中的搜索功能,继而也希望作为一个用户体验和交互的题目来跟大家分 ...

  7. (DFS)深度优先搜索算法详解

    背景 DFS 英文全称为(Depth First Search),中文简称深度优先搜索算法,其过程为沿着每一个可能的路径向下进行搜索,直到不能再深入为止,并且每一个节点只能访问一次. 算法的搜索遍历图 ...

  8. 利用DSF深度优先搜索来解容器倒水问题

    在一些面试算法或智力题中,时不时会遇到容器倒水的问题,例如,有三个容器,分别是10升,7升,4升,7升和4升的容器装满了水,10升容器是空的,如果将容器a中的水倒入容器b时,必须使得a中的水全部倒完, ...

  9. C++算法之深度优先搜索算法详解

    1.深度优先搜索算法 深度优先搜索是一种在开发爬虫早期使用较多的方法.它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) .在一个HTML文件中,当一个超链被选择后,被链接的HT ...

  10. C语言 DFS(深度优先搜索算法) 详解

    基本概念 深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过或者在搜 ...

最新文章

  1. 29 仿京东放大镜案例
  2. 【深度学习】基于Pytorch的softmax回归问题辨析和应用(一)
  3. s6-7 TCP 传输策略
  4. Nmap中文手册浅析
  5. POI增加 数据验证 下拉
  6. arduino读取水位传感器的数据显示在基于i2c的1602a上_XSB-IC-S2智能水位监测仪-老友网...
  7. 如何查询日志文件中的所有ip,正则表达式
  8. VMware 虚拟机扩展Ubuntu系统磁盘空间
  9. XML 文档结构必须从头至尾包含在同一个实体内
  10. CentOS7.5安装Tigervnc-server
  11. 记一次自己在Linux上倒腾Nginx的经历
  12. 一文详解YOLOX算法实现血细胞检测
  13. 南京师范大学2021年硕士研究生入学考试高等代数试卷及参考答案
  14. MongoDB应用记录
  15. nordic 52832 键盘
  16. LODOP设计打印模板
  17. 对YOLO bounding box的理解
  18. 【机器学习】PCA主成分项目实战:MNIST手写数据集分类
  19. 前端实现浏览器自动弹开三屏、一键关闭效果
  20. android画机器人,cdr怎么绘制安卓小人?cdr安卓机器人制作教程

热门文章

  1. CentOS7下安装配置Tomcat环境
  2. go基于grpc构建微服务框架-集成opentracing
  3. 使用Nginx实现负载均衡
  4. 使用commons-compress操作zip文件(压缩和解压缩)
  5. Picasso通过URL获取--用户头像的圆形显示
  6. reverse() ; sort() ; sorted()
  7. 理想的工作永远不存在
  8. 央视网与中国网络电视台5月底正式合并
  9. hash 图像检索方法汇总
  10. (全面 经典 管用)Windows7 64位+Cuda6.5+vs2012 的caffe配置历程