(一)深度优先搜索(DFS)

我们先给出深度优先的解决办法,所谓深度优先搜索,在迷宫问题里就是不撞南墙不回头,能走得深一点就尽量深一点。如果碰到了墙壁就返回前一个位置尝试其他的方向。在《啊哈!算法》中作者给出了一个深度优先搜索的基本模型,笔者认为比较贴切。

基本框架:

void dfs(int step)
{判断边界尝试每一种可能 for( i=0;i<n;i++){继续下一步 dfs(step+1);}返回 return;
}

例:最简单的DFS——全排列(全排列是啥,请自行度娘)

输入n,输出n的全排列
Input
3
Output
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

void dfs(int now) {if (now == n) {for (int i = 0; i < n; i++)cout << a[i] << " ";cout << endl;return;}for (int i = 1; i <= n; i++)if (!check[i]) {a[now] = i;check[i] = true;dfs(now + 1);check[i] = false;}
}

经典题:八皇后问题:

                    ☟

                    ☟

            ☟

                    ☟

                    ☟

                    ☟

                    ☟

                      ☟

                      ☟

                      ☟

                      ☟

                      ☟

伪代码:

DFS(int dep)
if (dep == n+1) { 输出方案并返回 }
for 枚举第dep行放的位置
if 枚举的位置是合法的
标记该位置
DFS(dep + 1)
解除标记

总结DFS:

优点:
占用空间小
很快就能找到一个解
缺点:
找到的解不一定是最优解
小技巧:
用DFS写暴力,可以卡时骗分

转载于:https://www.cnblogs.com/rmy020718/p/8835998.html

万能的搜索--之DFS(二)相关推荐

  1. (四)万能的搜索 —— 2. 解救小哈

    2. 解救小哈 任务: 迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径.注意障碍物是不能走的,当 ...

  2. 广度优先搜索(BFS)与深度优先搜索(DFS)

    一.广度优先搜索(BFS) 1.二叉树代码 # 实现一个二叉树 class TreeNode:def __init__(self, x):self.val = xself.left = Nonesel ...

  3. 深度优先搜索(DFS)与广度优先搜索(BFS)算法详解

    深度优先搜索(DFS)与广度优先搜索(BFS)详解 1.广度优先搜索算法 1.1.前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次. 但是图的遍历 ...

  4. (四)万能的搜索 —— 1. 深度优先搜索

    1. 深度优先搜索 问题:输入一个数n,输出1~n的全排列. 举个例子,假如有编号为1.2.3的3张扑克牌和编号为1.2.3的3个盒子. 现在需要将这3张扑克牌分别放到3个盒子里面,并且每个盒子有且只 ...

  5. (四)万能的搜索 —— 3. 广度优先搜索

    3. 广度优先搜索 广度优先搜索(Breadth First Search,BFS),也称为宽度优先搜索. 还是用一个二维数组来存储上一小节的迷宫. 最开始的时候小哼在迷宫(1,1)处,他可以往右走或 ...

  6. 万能的搜索——深度搜索和广度搜索

    搜索分为深度优先搜索(dfs)和广度优先搜索(bfs) 深度搜索和广度搜索的区别是: 深度搜索是往深度方向进行搜索的,先选一条路走到底,再选另一条路: 广度搜索是一层一层的,把一层上的所有情况都搜索到 ...

  7. 数据结构(廿五) -- C语言版 -- 图 - 图的遍历 -- 邻接矩阵 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.概 述 二.深度优先遍历(DFS) 2.1.无向图的遍历过程 2.2.有向图的遍历过程 2.3.总结说明 2.4.实现源代码 三.广度优先遍历(BFS) 3.1.广度优先的 ...

  8. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

  9. 从零开始的深度优先搜索(DFS)

    问题1: 什么是搜索? 搜索,是一个动态的,收集信息,分析信息,保存信息的循环过程.在循环的过程中,我们根据已知的信息,对探索方向进行调整.根据选择探索方向的策略,我们将搜索大致划分为"广度 ...

  10. 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)

    前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...

最新文章

  1. Mysql高级调优篇——第五章:Sql调优在面试中深度剖析
  2. cdi 2.7.5_集成测试CDI 1.0和Spring 3.1中的作用域bean
  3. 一些定义–测试技术9
  4. 非空验证方法(多值)和BindingResult提示验证信息
  5. 抽象方法vs虚方法 c# 1613719040
  6. xmrig 捐赠修改_四名学生如何通过CommuniGift更改在线捐赠
  7. 2017.5.8 飞扬的小鸟 失败总结
  8. 【matplotlib笔记】柱形图、直方图、散点图、饼图以及叠加图绘制
  9. JAVA基础--JAVA中的反射机制详解(转)
  10. 谈SQL SERVER数据库中的索引
  11. codevs4919 线段树练习4
  12. 值得收藏的30道Python练手题(附详细答案)
  13. wincc用c语言弹出确认窗口,wincc怎样弹出确认窗口?
  14. java经典算法(八)---zws
  15. PD虚拟机设置替代ALT+F4(关闭窗口)的快捷键的方法
  16. Python实现奇数阶幻方(不用numpy)
  17. Python统计微信消费!生成微信消费账单!真强大!
  18. 经典解压缩软件 WinRAR 5.71 无广告版
  19. 【芯片驱动】SMG42630的固定步数实现
  20. PS新手如何快速抠白色背景的玻璃瓶

热门文章

  1. NYOJ.904 search(二分查找,快速排序,结构体运用)
  2. 【牛客练习44:C】小y的质数(求区间内k生互斥数对数---容斥原理+质因子分解)
  3. redis 加载mysql_Mysql Redis PostgreSQL数据库查看客户端连接
  4. mysql sql model设置_操作mysql model
  5. es 吗 查询必须有sort_elasticsearch使用小结(ES使用小结)
  6. Python3面向对象:实例(instance)
  7. 自动驾驶 6-4 高级转向控制 - MPC Advanced Steering Control - MPC
  8. 阿里云云计算 42 CDN中的常用名词
  9. 线性可分支持向量机与硬间隔最大化
  10. 2021-09-08FTRL 跟随正确的领导者