zoukankan      html  css  js  c++  java
  • DFS——深度优先搜索的一般格式

      DFS是一种深度优先的搜索思想,运用递归完成搜索,本质上也算是穷举思想的一类,可以通过剪枝进行优化。

      DFS的核心是回溯和递归, 如果以迷宫为例,一般会指定走各个方向的顺序(例如先左再上再右再下)。从起点开始,进入DFS(),判断是否到达终点,再判断四个方向是否可走,如果有路,DFS会进入下一格,并且进行同样的判断,此处运用了递归。当四个方向都没路时,就会回溯到上一个位置,继续判断别的方向。

      DFS用途十分广泛,例如在以二维数组表示的图中搜索路径,也可以用于别的方面,比如求全排列,此时将每个数字看做一个点,每个全排列相当于从某个点开始将其他点连起来。

      DFS的一般格式: (一般将变化的状态设置为参数,例如坐标、全排列中已选取数字个数)

     1 public static void dfs()//参数用来表示状态  
     2 {  
     3     if(到达终点状态)  {  
     4         ...//根据题意添加  
     5         return;  
     6     }  
     7     if(越界或者是不合法状态)  
     8         return;  
     9     if(特殊状态)//剪枝
    10         return ;
    11     for(扩展方式)  {          //在迷宫中则为四个方向的扩展
    12         if(扩展方式后的状态可行)  {    //例如在迷宫中,该方向可行    
    13             修改操作;//根据题意来添加  
    14             标记;  //在迷宫中标记为已走过
    15             dfs();  
    16             (还原标记);  //状态回溯,将标记移除
    17             //是否还原标记根据题意  
    18         }  
    19  
    20     }  
    21 }          
  • 相关阅读:
    PHP实现畅言留言板和网易跟帖样式
    关于MySql中自增长id设置初始值
    建议
    P3P解决cookie存取的跨域问题
    学习模板实例
    Mac 安装Bower
    webstorm for mac 破解步骤
    Mac上搭建php开发环境
    ios 开发之 -- 极光推送,发送自定义消息,进入制定页面
    ios开发之 -- 强制横屏
  • 原文地址:https://www.cnblogs.com/ELAIRS/p/12196137.html
Copyright © 2011-2022 走看看