关于深搜的用法

深度优先搜索(DFS)

深度优先搜索是对图的一种遍历方式,如命所示,只要有可能,就尽可能的“深入”。以下为《算法导论》中对深度优先搜索的解释:

深度优先搜索总是对最近才发现的结点 v 的出发边进行探索,直到该结点的所有出发边都被发现为止。一旦结点 v 的所有出发边都被发现,搜索则“回溯”到 v 的前驱结点(v 是经过该结点才被发现的),来搜索该前驱结点的出发边。
该过程一直持续到从源结点可以达到的所有结点都被发现为止。如果还存在尚未发现的结点,则深度优先搜索将从这些未被发现的结点中任选一个作为新的源结点,并重复同样的搜索过程。该算法重复整个过程,直到图中的所有结点都被发现。

深度优先搜索的实现

实现深度优先搜索,通常使用递归的方式,也可以利用栈来实现。
而深度优先搜索可以分为先序,中序,后序,也就是我们所熟悉的树的遍历的方式。这三种方式本质上还是遵循于深度优先搜索的原则,即尽可能的“深入”,不同的是对结点的处理时机,如先序遍历总是先对当前结点进行了处理,再继续遍历,而后序遍历则是遍历到叶子结点才逐步对结点进行处理。

基本深搜模版

int search(int t)
{
    if(满足输出条件)
    {
        输出解;
    }
    else
    {
        for(int i=1;i<=尝试方法数;i++)
            if(满足进一步搜索条件)
            {
                为进一步搜索所需要的状态打上标记;
                search(t+1);
                恢复到打标记前的状态;//回溯
            }
    }
}

制作不易,求个点赞

该区不能再发话题了。