一个模板解决DFS(深度优先算法)问题(附例题)

这篇博客详细介绍了深度优先搜索(DFS)算法,包括DFS的基本思路、算法模板,并给出了多个例题,如排列组合问题和小学数学作业的解决方案。通过DFS,可以解决寻找路径、遍历图等问题,强调了在学习过程中理解和总结的重要性。
摘要由CSDN通过智能技术生成

目录

1.什么是DFS?

2.基本思路

3.DFS算法模板

4.例题

1.给定n个不同的数字(如1-n),请打印出m(m<=n)个数的排列,数量为A(n,m)。

2.给定n个不同的数字(如1-n),请打印出m(m<=n)个数的组合,数量为C(n,m)。

3.现在小学的数学题目也不是那么好玩的。看看这个寒假作业:


1.什么是DFS?

DFS(Depth First Search,中文:深度优先算法):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。


2.基本思路

深度优先遍历图的方法是,从图中某顶点v出发:

(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 当然,当人们刚刚掌握深度优先搜索的时候常常用它来走迷宫.事实上我们还有别的方法,那就是广度优先搜索(BFS).
搜索算法简而言之就是穷举所有可能情况并找到合适的答案,所以最基本的问题就是罗列出所有可能的情况。

从根开始计算,到找到位于某个节点的解,回溯法(深度优先搜索)作为最基本的搜索算法,其采用了一种“一只向下走,走不通就掉头”的思想(体会“回溯”二字),相当于采用了先根遍历的方法来构造搜索树。


3.DFS算法模板

定义三个数据集,分别用于数据的填充、已有的数据集和要输出的结果集。

当数据在填充过程中满足要求时,不再对后续的数据进行填充,所以清除index位置以及后续位置的数据

import java.util.ArrayList;
import java.util.List;
/*
 * DFS基类
 */
public abstract class DFS<T> {

    //填充空间
    protected List<T> buffer=new ArrayList<>();

    //数据集
    protected List<T> datalist=new ArrayList<>();

    //结果集,用于输出结果
    protected List<String> resultlist=new ArrayList<>();

    protected abstract void dfs(int index);

    /*
     *清除index位置以及后续位置的数据
     * @param index
     */
    protected void clearNextData(int index){
        for (int i=index ;i<buffer.size();i++){
            buffer.set(i,null);
        }
    }
}

4.例题

1.给定n个不同的数字(如1-n),请打印出m(m<=n)个数的排列,数量为A(n,m)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值