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

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

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

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

 public static void dfs()//参数用来表示状态
{
if(到达终点状态) {
...//根据题意添加
return;
}
if(越界或者是不合法状态)
return;
if(特殊状态)//剪枝
return ;
for(扩展方式) { //在迷宫中则为四个方向的扩展
if(扩展方式后的状态可行) { //例如在迷宫中,该方向可行
修改操作;//根据题意来添加
标记; //在迷宫中标记为已走过
dfs();
(还原标记); //状态回溯,将标记移除
//是否还原标记根据题意
} }
}

最新文章

  1. 设置WindowServer2012 时间同步NTP
  2. async 和 await小结
  3. 给libpcap增加一个新的捕包方法
  4. 让EditText不能自动获取焦点
  5. Ehcache(2.9.x) - API Developer Guide, Cache Decorators
  6. 丢手帕问题(环形链表)---Java 待优化
  7. Mac中MacPorts安装和使用
  8. dedecms 文章列表和频道列表同时调用
  9. 对于发Github的contributions贡献不会增加
  10. 领域模型(Domain Model)
  11. python 输出颜色的与样式的方法
  12. 手动安装 Eclipse 插件 Viplugin
  13. java基础面试题-1
  14. Java AWT
  15. React-Native StyleSheet属性支持
  16. 简单的WPS二次开发脚本
  17. Redis实战(五)
  18. vuex 定义
  19. angular4 checkbox复选框的全选,反选及个别选择
  20. hash值是啥,单页面应用的实质

热门文章

  1. 2018-8-10-win10-uwp-后台获取资源
  2. H3C PPP会话建立过程
  3. Redis 命令行工具能这样用你知道了吗?
  4. linux 让出处理器
  5. vc得到屏幕的当前分辨率方法
  6. TransactionDefinition接口中定义了七个事务传播行为
  7. Python9_类
  8. python scrapy爬取前程无忧招聘信息
  9. TypeScript躬行记(7)——命名空间
  10. saltstack的配置使用