DFS(深度优先遍历搜索解析)
2016-03-09 13:30
239 查看
深度优先搜索思想
深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是所有顶点均未被访问过,在G中任选一个顶点i作为遍历的初始点,则深度优先搜索递归调用包含以下操作:
(1)访问搜索到的未被访问的邻接点;
(2)将此顶点的visited数组元素值置1;
(3)搜索该顶点的未被访问的邻接点,若该邻接点存在,则从此邻接点开始进行同样的访问和搜索。
深度优先搜索DFS可描述为:
(1)访问v0顶点;
(2)置visited[v0]=1;
(3)搜索v0未被访问的邻接点w,若存在邻接点w,则DFS(w)。
实例:
图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组visited
[ ],它的初始状态为0,在图的遍历过程中,一旦某一个顶点i被访问,就立即让visited
[i]为1,防止它被多次访问。
下面来看几个实例,运用深搜解题:
杭电ACM2102A计划解救公主问题
杭电ACM1016素数圈问题
倒油问题
深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是所有顶点均未被访问过,在G中任选一个顶点i作为遍历的初始点,则深度优先搜索递归调用包含以下操作:
(1)访问搜索到的未被访问的邻接点;
(2)将此顶点的visited数组元素值置1;
(3)搜索该顶点的未被访问的邻接点,若该邻接点存在,则从此邻接点开始进行同样的访问和搜索。
深度优先搜索DFS可描述为:
(1)访问v0顶点;
(2)置visited[v0]=1;
(3)搜索v0未被访问的邻接点w,若存在邻接点w,则DFS(w)。
实例:
图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组visited
[ ],它的初始状态为0,在图的遍历过程中,一旦某一个顶点i被访问,就立即让visited
[i]为1,防止它被多次访问。
下面来看几个实例,运用深搜解题:
杭电ACM2102A计划解救公主问题
杭电ACM1016素数圈问题
倒油问题
相关文章推荐
- PHP变量
- JFinal redis cluster集群插件
- linux下vi命令大全
- 【SpringBoot】ApplicationContextInitializer接口
- 三角剖分算法(delaunay)
- Genymotion的下载安装
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- 20160309,微软3月8日发布13个安全补丁
- 设计模式(九)外观模式Facade(结构型)
- centos下的pcapy安装
- Ubuntu下 嵌入式Qt开发环境的搭建--转载
- iOS证书描述文件说明
- memcpy 与 memmove 区别
- 在Spring中调用基于CXF框架的webService
- 智能指针(三):unique_ptr使用简介
- ssh远程登录linux live系统
- MySQL binlog 组提交与 XA(分布式事务、两阶段提交)【转】
- C# 拆箱与装箱 要严格控制,数量多起来严重影响效率
- HDUACM2020
- MySQL之Alter语句用法总结