DFS总结之隐式图上的深搜


前言

本文总结了一些常见的在隐式图上深搜的DFS题目


一、DFS执行过程

在这里插入图片描述
在这里插入图片描述

二、DFS思考过程

1.搜索顺序

DFS题目首先考虑搜索顺序,就是要找一种搜索顺序,能把各种情况都枚举出来(想想上面说到的搜索树,每一步对应一个节点以及其延伸出的子树)。

2.回溯

回溯说白了就是在一个dfs内,结束了调用的dfs,回到原来的进程。回溯回到原来的进程后,一般都要“恢复现场” 记住 , 一但你从一个深搜出来 , 就马上恢复现场,就像事情没发生过一样。当然,不一定所有题目都要恢复现场,根据下面图来判断。

在这里插入图片描述

3.剪枝

剪枝就是把不必要的搜索进程砍掉
在这里插入图片描述

三、DFS常用模板(C++版)

dfs()//参数用来表示状态  
{  
    if(到达终点状态)  
    {  
        ...//根据题意添加  
        return;  
    }  
    if(越界或者是不合法状态)  
        return;  
    if(特殊状态)//剪枝
        return ;
    for(扩展方式)  
    {  
        if(扩展方式所达到状态合法)  
        {  
            修改操作;//根据题意来添加  
            标记;  
            dfs();  
            (还原标记)//是否还原标记根据题意  
            //如果加上(还原标记)就是 回溯法  
        }  
    }  
}

链接:https://www.acwing.com/blog/content/592/

四、隐式图常见题型及解法

五、参考:

https://www.acwing.com/blog/content/592/
https://www.acwing.com/blog/content/1834/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在SAP ABAP 7.50版本中,引入了一种新的增强方式——隐式增强。与显示增强不同,隐式增强不需要修改原始代码,而是通过继承方式来进行增强。 隐式增强的实现步骤如下: 1. 创建一个子类,继承需要增强的类。 2. 在子类中定义方法,并使用 SUPER-> 方法名的方式调用父类中的相应方法。 3. 在子类中重载需要增强的方法,并在其中实现增强逻辑。 下面举一个例子说明隐式增强的具体实现过程。 假设有一个需要增强的类 CL_MY_CLASS,其中有一个方法 DO_SOMETHING,现在需要在该方法中增加一些逻辑。具体实现过程如下: 1. 创建一个子类 CL_MY_CLASS_IMP,继承 CL_MY_CLASS。 2. 在子类中定义方法 DO_SOMETHING,并使用 SUPER->DO_SOMETHING 的方式调用父类方法。 3. 在子类中重载 DO_SOMETHING 方法,并在其中实现增强逻辑。 示例代码如下: ``` CLASS cl_my_class DEFINITION. PUBLIC SECTION. METHODS: do_something. ENDCLASS. CLASS cl_my_class IMPLEMENTATION. METHOD do_something. " 原有逻辑 ENDMETHOD. ENDCLASS. CLASS cl_my_class_imp DEFINITION INHERITING FROM cl_my_class. PUBLIC SECTION. METHODS: do_something REDEFINITION. ENDCLASS. CLASS cl_my_class_imp IMPLEMENTATION. METHOD do_something. " 新增逻辑 SUPER->do_something( ). " 原有逻辑 ENDMETHOD. ENDCLASS. ``` 在上面的代码中,我们创建了一个子类 CL_MY_CLASS_IMP,继承了需要增强的类 CL_MY_CLASS。然后在子类中重载了 DO_SOMETHING 方法,并在其中实现了新增的逻辑。在重载的方法中,我们使用了 SUPER->DO_SOMETHING 的方式调用了父类中的方法,以保留原有的逻辑。 通过隐式增强的方式,我们无需修改原始代码,就可以实现对原有类的增强,降低了代码维护的成本。同时,隐式增强也避免了在原有代码中添加大量的 IF EXIST 语句的情况,使得代码更加清晰易懂。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值