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

点击查看代码
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. Python 的 type 及常用魔法方法(上)

    魔法方法是 Python 内置方法, 不需要我们手动调用, 它存在的目的是给 解释器 调用的. 比如我们在写 "1 + 1 " 的时候, 这个 "+ " 就会自 ...

  2. 探索 Rust:从基础语法到实用概念

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  3. 人工神经网络(ANN)模型

    一.概述   人工神经网络(Artificial Neural Network,ANN),是一种模拟生物神经网络结构和功能的计算模型,它通过大量的神经元相互连接,实现对复杂数据的处理和模式识别.从本质 ...

  4. C#之System.Text.Json的用法

    System.Text.Json 是 C# 中的一个 JSON 序列化和反序列化库,它在 .NET Core 3.0 及更高版本中提供了内置支持.以下是 System.Text.Json 的用法详解: ...

  5. Django中的内置Tags

    Dates {% now "m/d/Y" %} copyright {% now 'Y' as current_year %} 该tag也可以接受Django的date 变量,比如 ...

  6. 企业为何要使用odoo18

    在当今快速变化的商业环境中,企业需要高效.灵活且经济实惠的管理工具来保持竞争力.Odoo 18 作为一款开源的企业资源计划(ERP)系统,凭借其全面的功能和独特的优势,成为众多企业的首选. 为什么选择 ...

  7. Linux下部署Spring Boot 项目 jar包

    打jar包   在IDEA 2020的最右侧边,选中Maven ,然后双击Lifecycle标签下的package即开始打包,之后就会在target目录下生成jar包. 注意,需要修改pom.xml ...

  8. 校内NOI模拟测试007T1 送分(score) “简单”的计数

    问题描述 校内评测链接 良心出题人准备为大家送出大量的分数. 出题人生成了一个序列,其中第\(\)个元素为\(a_i\). 定义一个集合\(\)的分值为 \[F(S,x) = \sum_{T \sub ...

  9. java的5种异常的语法

    1 try{}catch(){} ​ 2 try{}catch(){}catch(){} ​ 3 try{}catch(){}finally{} ​ 4 try{}catch(){}catch(){} ...

  10. Golang协程和线程区别

    一.进程.线程.协程介绍 进程:系统中所有的应用程序都是以进程(process)的方式运行,是系统进行资源分配和调度的基本单位,每个进程都有自己的独立的地址空间,使得进程之间的地址空间相互隔离. 线程 ...