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 }          
  • 相关阅读:
    瞬间从IT屌丝变大神——HTML规范
    瞬间从IT屌丝变大神——命名规则
    瞬间从IT屌丝变大神——分工安排
    写在开发前的话
    完全二叉树的权值
    无法更改电脑默认浏览器
    java语法错误,进行分析时已经到达文件结尾
    查找SHA1值
    关闭CPU 睿频方法
    Java idea 快捷键
  • 原文地址:https://www.cnblogs.com/ELAIRS/p/12196137.html
Copyright © 2011-2022 走看看