zoukankan      html  css  js  c++  java
  • 关于DFS的理解

    DFS(深度优先搜索)相当于暴力寻找有效解的过程

    如果把多种情况写成一个树的方式

    那么DFS的实质就是遍历所有分枝来寻找最优解

    而DFS中遍历所有解的方式采用了我们称之为回溯法的东西

    如图所示

    图中的搜索顺序为从A到B到D

    然后在向回退一步

    此时原来D的地方因为被访问过

    所以不选择访问之

    选择访问E,之后访问G

    因为E和G被访问过

    所以我们需要往回走到A

    此时向C开始访问

    具体过程很好理解

    做题时只需要每一次判断下是否满足条件即可

    下面上@Armin 给我们写的关于DFS相当好的模板

    想看@Armin 博客的同学请点击左边的友链哦

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

     1 void dfs(int )
     2 {
     3     if(到达终点状态)
     4     {
     5         ...//根据题意添加
     6         return; 
     7     }
     8     
     9     for(所有方式)
    10     {
    11         if(扩展方式所达到状态合法)
    12         {
    13             修改操作;//根据题意来添加
    14             标记;//访问过这个元素
    15             dfs();
    16             还原标记;
    17             //是否还原标记根据题意
    18             //如果加上就是回溯法 
    19         }
    20     }
    21 }

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    关于回溯法的话主要还是根据题意

    如果题意仅仅要求判断是否有解的话

    就没有必要再去回溯了

    浪费时间

    Notes:其实因为DFS是一个递归的过程

    其实还真的不是那么好懂

    博主整整看了两天才差不多理解

    有疑问的欢迎在评论区留言

    01:27:21  2018-11-20  Author:LanceYu

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/lanceyu/p/9986832.html
Copyright © 2011-2022 走看看