搜索专题
主要是bfs与dfs,所刷的是[kuangbin带你飞]系列里的搜索专题,附上vj链接:https://vjudge.net/contest/370139 题目格式是:题号(基本方法)(特殊之处)
Aurox_
这个作者很懒,什么都没留下…
展开
-
kuangbin搜索专题 A - 棋盘问题(POJ - 1321)(DFS)
棋盘问题:题目大意:(原题在文末)给出一个棋盘,在允许的位置上放k个棋子,有几种放法;要求每一行每一列只有一个棋子;思路:因为要使每一行每一列的只有单独的一个,所以可以放完这一行就去放下一行,直到放完或者没地方放;然后再从这一行的下个位置开始放;深搜;代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn =原创 2020-06-05 17:06:53 · 240 阅读 · 0 评论 -
kuangbin搜索专题 B - Dungeon Master(POJ - 2251)(BFS)
BFS(宽度优先搜索):应用队列(先进先出) 达到一层一层遍历的效果比如说第一步6个状态皆可走,则向对列中存入6个元素,之后再循环依次拿出6个状态,每个状态的情况都存入在这第一次的6个状态之后,然后依次往后放,以此来达到一层一层的操作;strchr()和strrchr():要在<cstring>头文件中strchr(char *str, int c) str是字符串,c是要查找的字符,从左开始查找,如果找到输出最先出现的位置,否则输出NULL;strrc.原创 2020-06-05 17:48:11 · 167 阅读 · 0 评论 -
kuangbin搜索专题 C - Catch That Cow(POJ - 3278)(BFS)(一条线上的BFS)
Catch That Cow:题目大意:(文末有原题)在一条线上,给出两个位置,每一步有两种操作:x + 1 或 x - 1; x *= 2;输出从第一个位置运动到第二个位置的最短距离思路:依旧是迷宫问题,不过是一条线上的迷宫问题(数轴),并要求输出最短的时间,三种运动方式的bfs;要注意考虑范围,剪枝;否则会TLE,并且要注意进行运动后的数据是否满足范围;代码:#include <iostream>#include <queue>#inclu原创 2020-06-05 18:11:24 · 197 阅读 · 0 评论 -
kuangbin搜索专题 E - Find The Multiple (POJ - 1426)(BFS、DFS 或 同余数定理)
Find The Multiple题意:(文末有原题)给你一个数n,输出这个数的一个由0、1构成的倍数,即n*m的每一位都是0或者1;、思路(一):利用同余数定理来解题;同余数定理: (a * b) % n = (a % n * b % n) % n; (a + b) % n = (a % n + b % n) % n;运用对a[i] = a[i / 2]+ i % 2; 模拟了双通道的bfs,例:a[2] = a[1] + 0,a[3]...原创 2020-06-08 16:43:18 · 206 阅读 · 0 评论 -
kuangbin 搜索专题 F - Prime Path (POJ - 3126)(BFS)(制表)(模拟队列)
模拟队列:运用两个整数(head、tail),分别做队首,队尾,来模拟queue中的入队,出队,取队首...void bfs() { // 0 int q[maxn]; //模拟一个int类型的队列进行基本的bfs // queue: // (head) int tail = 0, head = 0, x; // (tail) 此时是空队列 q[head] = x; // 0原创 2020-06-08 21:39:08 · 160 阅读 · 0 评论 -
kuangbin搜索专题 G - Shuffle Up(暴力)
Shuffle'm Up题目大意:(文末原题)给出两个长度为c字符串a,b和一个长度为2c的s字符串,如果a,b通过x次洗牌(a,b依次较吵[a1, b1, a2, b2 ... ac, bc])如果能得到s,则输出x,否则输出再发牌(a是s的前c项,b是s的后c项),如果最终不会得到s,则输出-1;思路:依据题意,循环每次都将a,b洗牌之后再判断,否则的话再发牌;代码:#include <iostream>#include <algorithm>#i原创 2020-06-09 20:23:03 · 229 阅读 · 0 评论 -
kuangbin搜索专题 H - Pots(BFS)(需要记录和输出每一步的操作)
Pots题目大意:(文末有原题)给你两个空杯子的容积,问能否通过倒水使得其中一个杯子内水的体积变为n;如果可以,输出需要的最短步数和每一步的操作;倒水:1. FILL(i) : 将第i个杯子注满水;(1<=i, j <= 2 && i != j) 2. DROP(i) : 将第i个杯子的水倒掉; 3. POUR(i, j) : 将第i个杯子内的水倒向第j个杯子,倒的结果:一个满,另一个空 或一个满,另一个有剩余...原创 2020-06-09 22:23:31 · 188 阅读 · 0 评论 -
kuangbin搜索专题 I - Fire Game(BFS)(双起点的bfs)
Fire Game:原创 2020-06-16 17:53:44 · 191 阅读 · 0 评论