欢迎来到我的第一个博客
作为一个萌新,让我们浅谈下可爱的深度优先搜索吧。。。
简单介绍
中文名 深度优先搜索
外文名 Depth-First-Search
提出者 霍普克洛夫特与罗伯特·塔扬
应用学科 计算机
基本思路
深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 当然,当人们刚刚掌握深度优先搜索的时候常常用它来走迷宫.事实上我们还有别的方法,那就是广度优先搜索(BFS).
基本框架(伪代码)
dfs(状态)
{
if 状态是目标状态 then
dosomething
else
for 每个新状态
if 新状态合法
dfs(新状态)
}
主程序:
dfs(初始状态)
一些注意事项
-当不存在可供搜索的新状态时返回上一层函数
-已遍历对象应作标记避免重复遍历
遍历顺序:ADGHFCBE
例:当遍历到D时,与之相邻的有ACG三个点,此时A已遍历,然后搜索到可遍历的点G,调用函数到G,搜索与G相邻的点。
总结
其实DFS还是很简单的,作为很多算法的基础和不会做时的替代选择,推荐大家掌握。
引用的部分资料: