浅谈深度优先搜索
Posted 功夫熊猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈深度优先搜索相关的知识,希望对你有一定的参考价值。
DFS(Deep first search)深度优先搜索。
面试,笔试的时候,你把dfs命名给他写清楚,一般的面试官就开始懵逼啦,觉得你高大上啦。
深度优先搜索,按照字面理解就是,一条路走到黑,直到找到一条出路为止。与之对应的广度优先搜索(BFS),这里不作拓展。
我的理解,其实所谓的深度优先搜索,其实就是递归调用的过程。从开始点i开始进行查找,一般是图的路径选择或者二叉树的叶子节点的查找。然后一般都是一个for循环,来依次处理i结点的可以有的选择机会结点,然后再for里面,把选择好的机会结点j,当成开始结点,重复调用本身这个过程。知道路径都走过或者找到对应的的叶子节点。
其实要弄懂深度优先搜索,充分理解递归调用的过程就行。了解递归的本质,其实深度优先搜索的本质。
数组的全排列也可以归类于深度优先搜索:
$arr=[1,2,3,4,5,6,7......];
$res= '';//用来保存排列的结果
dfs($arr,$res)
{
if(count($arr) <=1)
{
echo $res.$arr[0];
}
//依次从头开始尝试数字
for($i=0;$i<count($arr);$i++)
{
//每次将要当前循环的首轮结点数,放在第一的位置
$tmp = $arr[0];
$arr[0] = $arr[$i];
$arr[$i] = $tmp;
//将首个数字放入结果集,并将数字出列再递归调用
dfs(array_slice($arr,1),$res.$arr[0]);
}
以上是关于浅谈深度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章
数据结构与算法图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )