- 博客(8)
- 收藏
- 关注
原创 STL和基本数据结构
STL包含:容器,迭代器,空间配置器,配接器,算法,仿函数1、vector动态数组,从末尾能快速插入和删除,直接访问任何元素。但是在中间进行插入和删除会造成内存块的复制。如果数组后面的内存空间不够需要重新申请一块足够大的内存。所以时间紧张,所以竞赛的时候就直接用vector吧。题目 HDU 4841“圆桌问题”题目分析:可以用vector模拟动态变化的圆桌,赶走n个人下留下的都是好人。但是呢,通过看大佬的博客知道了还有递归可以解决。代码:递归,公式看代码吧//递归 old=(new
2021-01-28 15:15:31
196
原创 全排列问题
1、STL的next_permutation()注意要先用sort()排序得到最小的排列,优点:能够从小到大进行排序2、用递归求全排列,容易晕。。。多练练就好了让第一个数字不同,得到n个数列,faction:把第一个和后面的每个数进行交换 上面每个数中,去掉第一个数,得到n-1个数列,faction:与上一步类似 重复,直到用完全部数字举个最简单的栗子,打印n个数的全排列:STL方法:#include<bits/stdc++.h>using namespace std;
2021-01-28 14:02:57
133
原创 迭代加深搜索
IDDFS 题目 LOJ 10022“埃及分数”题目链接https://loj.ac/p/10022迭代加深,字面意思。适用于搜索树很深而且很宽的题,如果直接使用DFS会陷入递归无法返回;如果直接用BFS,队列可能爆炸。具体操作模板:1、先设定搜索深度为1,用DFS搜索到第1层即停止2、如果没有找到答案,再设定深度为2,用DFS搜索2层即停止3、继续设定深度为3,4,5巴拉巴拉巴拉,逐步扩大DFS的搜索深度,直到找到答案每一层的广度上采用了DFS的搜索思想,在具体变成实现上是DF
2021-01-28 11:05:17
279
原创 IDA*
题目 poj 3134题目链接https://vjudge.net/problem/POJ-3134前言:说一下IDA*是对迭代加深搜索的优化,加一个估价函数,预测出当前DFS的状态不再搜索下去,就可以直接返回,提高了效率。简单说,就是在IDDFS过程中利用估价函数进行剪枝操作。题目分析:翻译:等价于从数字1开始,用加减法,最少算多少次才能得到n。(这样清楚多了吧!)难点:如果每一步进行搜索,新值的数量增长非常快。直接DFS深度可能有1000很大概率就溢出了,如果用BFS也可能超出队
2021-01-27 16:45:03
110
原创 N皇后问题经典DFS
题目 HDU 2553“N皇后问题”题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2553前言:通过这个题学习到了剪枝。暴力破解会超时啊,就很拿人。DFS的难点在于扩展子节点的时候如何构造停止递归并返回的条件,就要用到剪枝函数。依然举个例子,分析一下4皇后怎么搞。思路如下:从第一行开始放皇后:第一行从左到右有4种方案,产生4个结点;第2行,排除同列和斜线,拓展新的结点,注意不用排除同行,因为第二行和第一行已经是不同行的了。继续拓展第三行和
2021-01-27 14:42:00
398
2
原创 DFS模板题
题目HDU1312题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1312在这里说一下DFS的思路吧,DFS就是递归,设num是到达砖块的数量,算法过程描述如下:在出书位置令num=1,标记这个位置已经走过 左,上,右,下四个方向,按顺时针顺序选一个能走的方向,走一步 在新的位置num++,标记这个位置已经走过 继续前进,如果无路可走,回退到上一步,换个方向再走 继续以上过程,直到结束诶图像传不上来,不传了,挺简单的,我这种笨比都能懂A
2021-01-27 10:03:37
233
1
原创 双向广搜
双向广搜练习 题目 hdu1401"Solotaire"原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1401双向广搜适用于知道起点和终点,并且正向和逆向都能进行搜索。原理:同时在起点和终点向对方做BFS,两个石头激起的波浪向对方扩散,将在中间的某个位置遇到,此时就找到了最优路径。题目大意:有一个8*8的棋牌,上面有4颗棋子,棋子可以上下左右启动。给定一个初始状态和一个目标状态,问能否在8步之内到达。题目分析:已经确定起点和终点,各自搜索.
2021-01-26 15:59:33
175
原创 八数码问题
八数码问题思路前言:备战蓝桥杯遇到一个八数码问题,整理一下思路。第一次写,不太好,见谅。BFS是由近到远的扩散过程,解决最短距离问题。搜索的可以是数,也可以是状态,八数码就是状态。从初始状态出发,每次转移都逐步逼近最终状态,每转移一次步数加一,达到目标时,经过的步数就是最短路径。举个例子:初始状态1 2 3 8 4 7 6 5 最终状态1 3 8 2 4 7 6 5 ...
2021-01-26 14:28:52
418
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人