
搜索
文章平均质量分 91
漫漫信奥之路
老师,我是一名老师,教信息学奥赛的老师而已!
展开
-
搜索优化剪枝策略
搜索的优化剪枝原创 2022-07-01 10:19:02 · 1025 阅读 · 0 评论 -
宽度优先搜索--BFS
BFS基本思想宽度优先搜索(Breadth First Search,BFS),简称宽搜,又称广度优先搜索。它是从初始结点开始,应用产生式规则和控制策略生成第一层结点,同时检查目标结点是否在这些生成的结点中。若没有,再用产生式规则将所有第一层结点逐一拓展,得到第二层结点,并逐一检查第二层结点是否包含目标结点。若没有,再用产生式规则拓展第二层结点。如此依次拓展,检查下去,直至发现目标结点为止。如果拓展完所有结点,都没有发现目标结点,则问题无解。BFS适合求最少步骤或者最短解序列这类最优解问题例如,求最大原创 2022-05-13 11:07:27 · 4269 阅读 · 0 评论 -
搜索题目综合
BFS1、小X学游泳2、迷宫出口3、走出迷宫的最少步数4、走出迷宫的最少步数25、数池塘6、骑士巡游7、骑士牛8、走出迷宫的最短路径9、泉水10、最小拐弯路径DFS1、卒的遍历2、马的遍历3、方格取数4、特殊的质数肋骨5、古希腊之争(二)6、素数环7、素数环28、子集和求解9、单词接龙10、湖计数【后续提供视频讲解和标程】前面课程连接1、宽度优先搜索2、深度优先搜索3、回溯法-排列组合类4、回溯法-切割问题与子集问题5、回溯法-棋盘类问题...原创 2022-05-17 15:32:12 · 740 阅读 · 0 评论 -
回溯法--棋盘类
这类问题需要注意三个问题1、存储问题:一般用二维数组存储2、枚举对象:一般以坐标作为枚举对象3、坐标增量:二维数组或者两个一维数组迷宫问题先看一个简易迷宫问题吧现在有一个小迷宫,如图所示,请编程求解从入口到终点的最短路径。迷宫由n行m列的单元格组成,且n,m小于等于50.注意黑色区域快不可以走,只能走白色区域。输入: 第一行:n,m,分别代表n行m列。第2-n行表示为迷宫,0表示空地,1表示障碍物。最后一行,x,y,p,q前两个为入口坐标,后两个为终点坐标。 输出: 最短路径样原创 2022-05-10 15:57:23 · 642 阅读 · 0 评论 -
深度优先搜索(DFS)
一、关于DFS的一些小概念DFS可谓是“不撞南墙,不回头”。就像走迷宫一样,选择一条路一直走下去,当撞南墙了,才返回分叉口去试下一条路。有两个概念需要提前明晰一下:1、状态:状态一般是指客观现场信息的描述,通常用T表示。一般要注意是指当前状态,用T0表示初始状态,Tn表示终止状态。2、产生式系统。状态依据产生式规则,转移至另一个状态。它主要体现状态的表示,新状态产生的规则,状态转移三大功能。重点理解1、DFS实际上是利用递归进行的暴力搜索,因此,写DFS之前我们要弄清楚枚举对象,这点很关键,枚举原创 2021-09-22 10:17:50 · 2088 阅读 · 7 评论 -
回溯法--切割问题与子集问题
一、DFS的框架,必须熟记void dfs(int k){ if(到达终点或者目的地) { 输出问题解或者解得方案数+1; } for(int i = 0;i<="可扩展状态总数";i++) { 按照规则,产生新的状态; if(判断新状态是否合法) { 保存合法结果; dfs(k+1); 恢复现场,回溯;//可以没有,根据情况来定 } }}int main(){ ..... dfs(k); 回溯;//可选 return 0;原创 2022-05-06 16:09:39 · 1433 阅读 · 3 评论 -
回溯法--排列组合类
一、关于DFS的一些小概念DFS可谓是“不撞南墙,不回头”。就像走迷宫一样,选择一条路一直走下去,当撞南墙了,才返回分叉口去试下一条路。有两个概念需要提前明晰一下:1、状态:状态一般是指客观现场信息的描述,通常用T表示。一般要注意是指当前状态,用T0表示初始状态,Tn表示终止状态。2、产生式系统。状态依据产生式规则,转移至另一个状态。它主要体现状态的表示,新状态产生的规则,状态转移三大功能。二、DFS的框架void dfs(int k){ if(到达终点或者目的地) { 输出问题解或者原创 2021-09-09 15:49:17 · 1095 阅读 · 3 评论