当前位置: 首页 > news >正文

*搜索算法(2)

持续更新···

1.递归型枚举与回溯剪枝初识

1. 画决策树;
2. 根据决策树写递归
【题⽬描述】
今有 n 位同学,可以从中选出任意名同学参加合唱。
请输出所有可能的选择⽅案。
【输⼊描述】
仅⼀⾏,⼀个正整数 n
【输出描述】
若⼲⾏,每⾏表⽰⼀个选择⽅案。
每⼀种选择⽅案⽤⼀个字符串表⽰,其中第 位为 Y 则表⽰第 名同学参加合唱;为 N 则表⽰
不参加。
i i
需要以字典序输出答案。
设计递归函数:
*重复⼦问题:针对某⼀位,「选」或者「不选」这个数。因为最终结果要按照「字典序」输出,我们可以「先考虑不选」,然后「再考虑选」;

【题⽬描述】
1 ∼ n n 个整数中随机选出 m 个,输出所有可能的选择⽅案。
【输⼊描述】
两个整数 n , m ,在同⼀⾏⽤空格隔开。
【输出描述】
按照从⼩到⼤的顺序输出所有⽅案,每⾏ 1 个。
⾸先,同⼀⾏内的数升序排列,相邻两个数⽤⼀个空格隔开。
其次,对于两个不同的⾏,对应下标的数⼀⼀⽐较,字典序较⼩的排在前⾯(例如 1 3 5 7
1 3 6 8 前⾯)。

【题⽬描述】
今有 n 名学⽣,要从中选出 k ⼈排成⼀列拍照。
请按字典序输出所有可能的排列⽅式。
【输⼊描述】
仅⼀⾏,两个正整数 n , k
对于 100% 的数据, 1 ≤ k n ≤ 10
【输出描述】
若⼲⾏,每⾏ k 个正整数,表⽰⼀种可能的队伍顺序

 2.DFS

3.剪枝与优化

【题⽬描述】
将整数 n 分成 k 份,且每份不能为空,任意两个⽅案不相同(不考虑顺序)。
例如: n = 7, k = 3 ,下⾯三种分法被认为是相同的。
1, 1, 5
1, 5, 1
5, 1, 1
问有多少种不同的分法。
【输⼊描述】
n , k 6 < n ≤ 200 2 ≤ k ≤ 6
【输出描述】
1 个整数,即不同的分法。
注意剪枝位置的不同,而导致搜索树的不同
1.如果在进⼊递归之前剪枝,我们不会进入非法的递归函数中;
2.但是如果在进⼊递归之后剪枝,我们就会多进⼊很多不合法的递归函数中。
【题⽬描述】
Freda 和 rainbow 饲养了 N ( N ≤ 18)  只⼩猫,这天,⼩猫们要去爬⼭。经历了千⾟万苦,⼩猫们
终于爬上了⼭顶,但是疲倦的它们再也不想徒步⾛下⼭了
Freda 和 rainbow 只好花钱让它们坐索道下⼭。索道上的缆⻋最⼤承重量为 W ,⽽ N 只⼩猫的重
量分别是 C1,C2,,,,,CN。当然,每辆缆⻋上的⼩猫的重量之和不能超过 W (1 ≤ C i W ≤ 10^8) 。每租⽤⼀辆缆⻋,Freda 和 rainbow 就要付 1 美元,所以他们想知道,最少需要付多少美元才能把这 N 只⼩猫都运送下⼭?
【输⼊描述】
第⼀⾏包含两个⽤空格隔开的整数, N W 。 接下来 N ⾏每⾏⼀个整数,其中第 i + 1 ⾏的整
数表⽰第 i 只⼩猫的重量 C i
【输出描述】
输出⼀个整数,最少需要多少美元,也就是最少需要多少辆缆⻋。
搜索策略:对于每每⼀只猫,我们都有两种处理⽅式:
*要么把这只猫放在已经租好的缆⻋上;
*要么重新租⼀个缆⻋,把这只猫放上去。

 4.记忆化搜索

记忆化搜索也是⼀种剪枝策略。
通过⼀个"备忘录",记录第⼀次搜索到的结果,当下⼀次搜索到这个状态时,直接在"备忘录"⾥⾯找结果。
记忆化搜索,有时也叫动态规划。
【题⽬描述】
斐波那契数 (通常⽤ F(n) 表⽰)形成的序列称为 斐波那契数列 。该数列由 0 1 开始,后
⾯的每⼀项数字都是前⾯两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n)
【算法原理】
在搜索的过程中,如果发现特别多完全相同的⼦问题,就可以添加⼀个备忘录,将搜索的结果放在备忘录中。下⼀次在搜索到这个状态时,直接在备忘录⾥⾯拿值

5.BFS

宽度优先搜索的过程中,每次都会从当前点向外扩展⼀层,所以会具有⼀个最短路的特性。因此,宽搜不仅能搜到所有的状态,⽽且还能找出起始状态距离某个状态的最⼩步数。
但是,前提条件是每次扩展的代价都是1 ,或者都是相同的数。宽搜常常被⽤于解决边权为 1的最
短路问题。
【题⽬描述】
有⼀个 的棋盘,在某个点 上有⼀个⻢,要求你计算出⻢到达棋盘上任意⼀个点最少
要⾛⼏步。
n × m ( x , y )
【输⼊描述】
输⼊只有⼀⾏四个整数,分别为 n , m , x , y
【输出描述】
⼀个 n × m 的矩阵,代表⻢到达某个点最少要⾛⼏步(不能到达则输出 −1 )。

 【题⽬描述】

FJ 丢失了他的⼀头⽜,他决定追回他的⽜。已知 FJ 和⽜在⼀条直线上,初始位置分别为x 和y ,
假定⽜在原地不动。FJ 的⾏⾛⽅式很特别:他每⼀次可以前进⼀步、后退⼀步或者直接⾛到2*x
的位置。计算他⾄少需要⼏步追上他的⽜。
【输⼊描述】
第⼀⾏为⼀个整数 t (1 ≤ t ≤ 10) ,表⽰数据组数;
接下来每⾏包含⼀个两个正整数 x , y (0 < x , y ≤ 10 ) 5 ,分别表⽰ FJ 和⽜的坐标。
【输出描述】
对于每组数据,输出最少步数。

 八数码难题

【题⽬描述】
在 的棋盘上,摆有⼋个棋⼦,每个棋⼦上标有 1⾄8 的某⼀数字。棋盘中留有⼀个空格,空格⽤ 0来表⽰。空格周围的棋⼦可以移到空格中。要求解的问题是:给出⼀种初始布局(初始状态)和⽬标布局(为了使题⽬简单,设⽬标状态为123804765 ),找到⼀种最少步骤的移动⽅法,实现从初始布局到⽬标布局的转变。
【输⼊描述】
输⼊初始状态,⼀⾏九个数字,空格⽤ 0 表⽰。
【输出描述】
只有⼀⾏,该⾏只有⼀个数字,表⽰从初始状态到⽬标状态需要的最少移动次数。保证测试数据中⽆
特殊⽆法到达⽬标状态数据。

6.多源BFS

多源最短路问题的边权都为 1 时,此时就可以⽤多源 BFS 来解决。
把这些源点汇聚在⼀起,当成⼀个"超级源点"。然后从这个"超级源点"开始,处理最短路问题。落实到代码上时:
1. 初始化的时候,把所有的源点都加⼊到队列⾥⾯;
2. 然后正常执⾏ bfs 的逻辑即可。
也就是初始化的时候,⽐普通的 bfs 多加⼊⼏个起点。
题:刺杀大使

7.01BFS

8.floodfill问题

相关文章:

  • Ollama进行DeepSeek本地部署存在安全风险解决方案,nginx反向代理配置
  • 2025 电商新航道:AI 多模态交互领航,元宇宙商品展示赋能
  • 【第一章、北海渔村】AI写作效果预览 【AI小说+AI人物图】评论区点赞留言 告知工具
  • 微软发布Dragon Copilot,打造医疗行业首款AI语音助手
  • 19.5-STM32接收数据-根据状态控制电机
  • 利用Git和wget批量下载网页数据
  • 【LangChain】对话历史管理
  • Celia智能助手2.0架构演进与性能突破
  • 网络安全中分区分域
  • 18.1 大模型时代的开源与数据协议:合规之路与技术突
  • 【网络安全】SSL重协商原理、过程、防范详解(含案例)
  • 如何将ConfigMap中的内容挂载为容器内的文件
  • 计算机视觉算法实战——医学影像分割(主页有源码)
  • 大模型笔记_大模型不是靠记忆回答问题
  • C++20 标准化有符号整数:迈向更可预测的整数运算
  • 《深度学习进阶》第9集:自监督学习与无监督学习
  • ES检索elasticsearch实现python库方法
  • 基于微信小程序的停车场管理系统的设计与实现
  • 【论文带读(3)】《Real-Time Flying Object Detection with YOLOv8》带读笔记翻译
  • R语言 | 在图形上标注P值的R包
  • 电商怎么做营销推广w/什么叫优化
  • 阿里云网站空间主机/域名解析ip地址查询
  • 哪里的郑州网站建设/可以直接打开网站的网页
  • 阿里云网站建设/优化搜狗排名
  • 网站建设维护是做什么的/电商平台排名
  • 自己的电脑做网站/seo优化排名软件