浅谈深度优先搜索

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 | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )

深度优先搜索法和广度优先搜索法

基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)

深度优先搜索算法解释下?

简述深度优先搜索遍历的方法。