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 }          
  • 相关阅读:
    JS系列:三元运算符与循环
    浏览器解析js和type判断数据类型
    JS系列:数据类型详细讲解
    JS系列:编程语言
    京东校招面试汇总
    有关axios的request与response拦截
    正则表达式 判断内容是否为合法的url
    H5 小代码(实时更新)
    H5 回到顶部按钮
    图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)
  • 原文地址:https://www.cnblogs.com/ELAIRS/p/12196137.html
Copyright © 2011-2022 走看看