中序遍历:左儿子,我,右儿子

点击查看代码
void dfs(int u) {
if(u > n) return ;
dfs(u + 1);
cout << u << endl;
dfs(u + 1);
}

形式是:终止条件 + 逻辑式

搜索:本质是重复子问题

将规模大的问题转化为形式相同但规模更小的子问题,逻辑相同所以专注于实现本层的逻辑即可

且dfs(pos)含义:1···pos-1层已决定,现考虑第pos位情况

DFS:不断尝试更进一步,碰壁就回头,换一条路继续走

DFS答案会呈现出一颗搜索树的形式

对于回溯: 本质是当前层有x种情况, 当前选择一种, 对剩余x - 1种的考虑

BFS(顺序结构,有序性):逐层扩展

队列(First In First Out):先存一步能到的点,然后再存两步能到的点,再生成3步能到····,保证了离起点更近一定有先入队

BFS其中的队列优化,但其实本质是不用队列而是形式上处于类似分裂思想

例如:

点击查看代码
如迷宫问题:
每次可以分裂为4个情况走到下一个点,且有先分裂一定有比后分裂离起点更近,后分裂一定比起点更远

因BFS逐层扩展,所以当初次访问在k层,意味着走k步可以到达这个点

BFS框架:

1.建队
2.(非空时)将本层能拓展到的all点加入队列,并弹出本层

剪枝

记忆化搜索

使程序更简洁

DFS的两种状态表示形式:

全局变量存储:

int sum = 0;
void dfs(int u) {
if(找到答案) {
输出或统计 sum;
return;
}
for(枚举下一步操作) {
if(合法操作) {
sum = sum + a[i];
dfs(u + 1);
sum = sum - a[i];//此时需要对sum回溯
}
}
}

函数参数存储传递:

void dfs(int u, int sum) {
if(找到答案) {
输出或统计 sum;
return;
}
for(枚举下一步操作) {
if(合法操作) {
dfs(u + 1, sum + a[i]);//无须回溯
}
}
}

构造函数: 无赋值时为构造的默认值

STL容器中基本都包含构造函数,用来初始化STL

构造函数:

struct AK {
int x, y;
AK(int sx = 0, int sy = 0) {//构造函数与结构体同名,无须返回值
x = sx, y = sy;
}
}

调用:2种

AK tmp(1, 1);//在新创建的tmp中赋值即tmp.x和tmp.y
q.push(tmp);
//临时变量
q.push(AK(1, 1));

搜索&记忆化(重复子问题,逻辑相同)的更多相关文章

  1. skiing(搜索+记忆化搜索)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  2. 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)

    链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...

  3. P2690 接苹果(暴力搜索+记忆化)

    思路: 建树:就是在每一分钟进行分枝,是原地不动,还是移动.然后,走完整个过程. 但是,我其实还是走了弯路,因为,最开始想的是剪枝,没有用记忆化搜索.但是,肯定是能用dp来做,啊啊啊啊阿,能用dp肯定 ...

  4. BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)

    BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在 ...

  5. P4363 [九省联考2018]一双木棋chess(对抗搜索+记忆化搜索)

    传送门 这对抗搜索是个啥玩意儿…… 首先可以发现每一行的棋子数都不小于下一行,且局面可由每一行的棋子数唯一表示,那么用一个m+1进制数来表示当前局面,用longlong存,开map记忆化搜索 然后时间 ...

  6. [luogu]P1514 引水入城[搜索][记忆化][DP]

    [luogu]P1514 引水入城 引水入城 题目描述在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形 ,如下图所示,其中每个格 ...

  7. CodeForces1249B1/B2-Books Exchange-dfs-一般搜索+记忆化搜索

    一般搜索 注意:一般定义成void Books Exchange (easy version)  CodeForces - 1249B2 The only difference between eas ...

  8. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...

  9. poj--1579--(DFS+记忆化搜索之经典)

    记忆化搜索   记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用 动态规划的那种思想和模式作一些保存. 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态. 更重要的是搜索还可以 ...

  10. uva 10651 - Pebble Solitaire(记忆化搜索)

    题目链接:10651 - Pebble Solitaire 题目大意:给出一个12格的棋盘,‘o'代表摆放棋子,’-‘代表没有棋子, 当满足’-oo'时, 最右边的棋子可以跳到最左边的位子,而中间的棋 ...

随机推荐

  1. vue3 基础-常用模板语法

    一个 vue 的单文件 SAP ( single page web application ) 即在一个 .vue 为后缀的文件中, 会包含3个部分. 模板: html 逻辑: javascript ...

  2. 使用php的openssl_encrypt和python的pycrypt进行跨语言的对称加密和解密问题

    最近有一个业务需求,需要前端传递一个密码到后端,期间要对传递的密码通过进行对称加密,我们约定使用成熟的AES加密方法. 前端使用php,后端用python,但是发现前端兄弟加密后的字符串,在pytho ...

  3. Number of Islands——LeetCode进阶路

    原题链接https://leetcode.com/problems/number-of-islands/ 题目描述 Given a 2d grid map of '1's (land) and '0' ...

  4. MQTT协议与ODOO的结合使用

     一.MQTT简述      MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的 ...

  5. 深入理解Java引用类型和值调用-变量在内存里存在哪里

    目录 引言 数据类型分类 基本类型 引用类型 引用分类 数据存在哪 基本类型与引用类型的区别 值传递 引用对象传递之例外null Reference 引言   什么是数据类型?在计算机科学和计算机编程 ...

  6. Django Web应用开发实战附录A

    Django面试题 1.Python解释器有哪些类型,有什么特点? CPython:由C语言开发,而且使用范围最广泛IPython:基于CPython的一个交互式计时器PyPy:提高执行效率,采用JI ...

  7. 「Note」数论方向 - 组合数学

    1. 容斥原理 1.1 介绍 解决集合内计数问题. \(S\) 为集合编号集合. \[\left | \bigcup_{i\in S}A_i \right | =\sum_{T\subseteq S\ ...

  8. python爬虫基本学习——函数

    函数 概念:编写程序时,需要某块代码多次,为了提高编写效率和代码的重用,把具有独立功能的代码块组织为一个小模块,即函数. 代码练习 ''' #函数的定义 def printinfo(): print( ...

  9. C++数据结构和算法代码模板总结——算法部分

    数据结构和算法学*了将*两周,及时总结和整理一下相关的知识点温故而知新.(一)C++双指针,有个经典的问题:荷兰国旗问题.[leetcode]75.颜色分类 public void sortColor ...

  10. K&R 语法 vs. ANSI C 语法

    由于项目中使用了Bison,看到有个奇怪的C语言的语法,查了一下居然是要兼容早期的C标准 Bison 是什么? Bison 是一个 语法分析器生成器(parser generator),它用于根据 上 ...