深度优先搜索(Depth-First-Search)

从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不 了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。

其实称为“远度优先搜索”更容易理解些。因为这种策略能往前走一步就往前走一 步,总是试图走得更远。所谓远近(或深度),就是以距离起点的步数来衡量的。

中国大学mooc 郭炜老师的算法上讲的几个模板(伪代码)
我写了一下注释,便于理解

1.判断从V出发是否能走到终点

int main()
{将所有点标记为新点起点 = 1;终点 = 8;cout<<Dfs(起点);
}bool Dfs(V){if(V为终点)return true;if(V为旧点)return false;将V标记为旧点对和V相邻的每个节点U{//往往要写多个if,将每个相邻节点都考虑到if(Dfs(U)==true)return true;
}return fasle;
}

2.判断从V出发是否能走到终点,如果能,要记录路径:

Node path[MAX_LEN];//MAX_LEN取节点总数即可
//path,记录路径。node,可以是int(节点标号),也可以是结构题类型
int depth;//深度int main()
{将所有点标记为新点;//一般memset全变成0表示新点,1表示旧点depth = 0;if(Dfs(起点)){for(int i=0;i<=depth;++i)//输出经过的每个点的路径cout<<path[i]<<endl;}
}bool Dfs(V){if(V为终点)path[depth]=V;return true;
}if(V为旧点)return false;将V标记为旧点;path[depth]=V;++depth;对和V相邻的每个节点U{if(Dfs(U)==true)
//如果返回true,那么说明,从v开始能走到终点
}--depth;//现在v是放到path里的,但是返回false,说明从v出发走不到终点,//v不应出现在路径里,所以深度减一。return false;
}

3.深度优先遍历图上所有节点

Dfs (V) { if( V是旧点 )return; //如果v已经走过,那马上返回将V标记为旧点 ;对和 V相邻的每个点 U { Dfs (U);//包含他的父节点和子节点都要涉及到//常用if判断条件是否满足,然后dfs}
}
int main() {将所有点 都标记为新;while( 在图中能找到新点 k)Dfs (k);//这样避免了有多个连通图的情况
}

深度优先搜索重要模板相关推荐

  1. 深度优先搜索(模板使用)

    深度优先搜索(模板使用) 模板出处 关于模板出处,来自这里 本文仅通过例题对模板的使用进行说明. #include<cstdio> #include<cstring> #inc ...

  2. DFS (深度优先搜索) 算法详解 + 模板 + 例题,这一篇就够了

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

  3. 深度优先搜索的概念原理、模板和leetcode刷题推荐(js)

    概念 深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次. 我的理解为:深度优先 ...

  4. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南

    leetcode dfs Have you ever solved a real-life maze? The approach that most of us take while solving ...

  5. 一文搞懂深度优先搜索、广度优先搜索(dfs、bfs)

    前言 你问一个人听过哪些算法,那么深度优先搜索(dfs)和宽度优先搜索(bfs)那肯定在其中,很多小老弟学会dfs和bfs就觉得好像懂算法了,无所不能,确实如此,学会dfs和bfs暴力搜索枚举确实利用 ...

  6. 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)

    文章目录 前言 邻接矩阵和邻接表 深度优先搜索(dfs) 宽度(广度)优先搜索(bfs) 总结与比较 前言 在有向图和无向图中,如果节点之间无权值或者权值相等,那么dfs和bfs时常出现在日常算法中. ...

  7. 数据结构与算法--图论-深度优先搜索及其应用

    深度优先搜索 深度优先搜索(depth-first search) 是对先序遍历(preorder traversal)的推广,我们从某个顶点v开始处理v,然后递归的遍历所有与v邻接顶点.如果这个过程 ...

  8. 蓝桥杯笔记:DFS(深度优先搜索)解决问题

    DFS: 深度优先搜索: 访问当前的元素后,递归访问元素的邻接元素(找出所有下一步的可能元素,判断是否能访问),撤回当前元素访问 dfs(当前状态) {//递归终止条件if(当前状态==结束状态) { ...

  9. dfs深度优先搜索_图的深度优先搜索(DFS)

    dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...

最新文章

  1. 在Json解析过程中,我为什么用object1.optInt ,和 object1.optString
  2. 从nginx-rtmp中提取一帧h264帧
  3. dart --- 环境配置
  4. PHP + NGINX 控制视频文件播放,并防止文件下载
  5. PyQt4重写事件处理方法
  6. pppoe-环境下的mtu和mss
  7. 图解TCPIP-ICMP
  8. 书摘—智能主义:未来商业与社会的新生态
  9. Windows中安装Electron说明
  10. 拓端tecdat|R语言GARCH-DCC模型和DCC(MVT)建模估计
  11. HackTheBox You know racecar 格式化字符串漏洞pwn题目
  12. Linux环境变量PSI指什么,psi是什么单位(pSI指标应用原则)
  13. 局域网怎么添加新的计算机用户,如何添加局域网
  14. Windows下安装mysql的操作步骤
  15. 微信小程序(八)实战——加载图片images
  16. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Finding Unexpected Intents
  17. Linux 根目录与路径
  18. linux双击运行jar包,linux下发布JAR包 并运行
  19. 京东抢购源代码(不需要修改,拿过来直接用)
  20. python高级语言怎么学习_Python作为近几年大热的语言,要如何学习呢?

热门文章

  1. cdgb调试linux崩溃程序
  2. [深入学习C#]匿名函数、委托和Lambda表达式
  3. python 根据名称获取pid_【Python学习笔记】76、常用第三方模块psutil
  4. boost 线程 linux,Boost Linux线程第一课
  5. r语言的MASS包干什么的_R语言综述的包
  6. linux java no x11_在linux下运行javaMail程序报No X11 DISPLAY variable was...
  7. 字符串格式化成时间格式_JAVA | 常用的日期/时间格式化方式
  8. JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)
  9. win7系统如何开启udma功能
  10. Chrome浏览器可以修改特定页面背景色吗?Chrome浏览器修改特定页面背景色的方法