随笔分类 - 深度优先搜索dfs
摘要:题目传送门 一、暴力法建图+DFS遍历 上来就傻啦吧唧的暴力存图,暴力,信奉大力出奇迹!此代码过了2个测试点,其它,原因:测试数据有环!不加数组,就死循环了,表现就是! #include <bits/stdc++.h> using namespace std;
阅读全文
摘要:一、问题引入 有一天,小哈一个人去玩迷宫。但是方向感不好的小哈很快就迷路了。小哼得知后便去解救无助的小哈。此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈。那么,问题来了... 二、问题分析 首先我们用一个二维数组来存储这个迷宫,刚开始的时候,小哼处于迷宫的入口处$(1,1)\(,
阅读全文
摘要:一、数字全排列 小哈面前有三个箱子,手上有1,2,3三张牌,规定能放小牌就放小牌,小哈放完最后一个箱子后,最后在箱子的牌能有几种排列? 二、代码实现 #include <bits/stdc++.h> using namespace std; const int N = 10; int a[N]; b
阅读全文
摘要:题目传送门 一、二叉树+bfs解法 #include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; const int N = 210; bool st[N]; //是不是走过了 int n, ans = 0x3f3
阅读全文
摘要:题目传送门 一、广度优先搜索解法 #include <bits/stdc++.h> using namespace std; const int N = 110; char a[N][N]; //地图 //坐标结构体 struct coord { int x, y; }; int n, m; int
阅读全文
摘要:题目传送门 #include <bits/stdc++.h> using namespace std; //哪个数字 int n; //全局路径(需要回溯) vector<int> path; //输出 void print() { //划分成两部分,最后一部分不在尾巴上加+号! for (int
阅读全文
摘要:题目传送门 理解与感悟 1、方向数组的使用 2、路径数组的使用 假如没有路径数组,就不好记录行走的过程,最终走到了终点,也不需要哪些点走过,没法重头描述路径。 带路径的dfs #include <bits/stdc++.h> using namespace std; const int N = 11
阅读全文
摘要:题目传送门 C++代码 #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int N = 30; string a[N * 2]; int res; //最大长度 char start; /
阅读全文
摘要:题目传送门 感悟与总结 1、典型的深度优先搜索,记录路线条数一般是深度优先搜索。 2、没了,就这些。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 10; int n, m, t;
阅读全文
摘要:https://www.luogu.com.cn/problem/P2036 一、二进制枚举大法 #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; typedef long long LL; const
阅读全文
摘要:题目传送门 总结与感悟 1、查找最短路径,首选广度优先搜索,深度优先搜索和动态规划都似乎有大炮打蚊子的嫌疑,不好想,细节多。 2、广度优先搜索,一般入队列的都是一个结构体或者pair<int,int> ,因为如果只是一个整数,描述的信息量太小。 3、需要有一个st数组,用来记录是否已经走过,走了几步
阅读全文
摘要:题目传送门 1、深度优先搜索 #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; int res; //每一科目试题时间总和 int s[20 + 10]; //科目数量 int a[60 + 10];
阅读全文
摘要:题目传送门 #include <bits/stdc++.h> using namespace std; const int N = 100; int a[N], n, ans; int b1[N];//列桶 int b2[N];//正对角线桶 int b3[N];//反对角线桶 //解决:第x行的皇
阅读全文
摘要:题目传递门 一、深搜 别的也不会,一个深搜走天下!深搜我们主要关心的是下一步噢~ 怎么个深搜法呢?我们模拟一下,有一个装个顺序号小球的队列,一个个准备放到一个栈里。一共几下面几种场景: 1、队列为空,栈为空。 这种场景的下一步就只能是“游戏终止”,而“游戏终止”时我们应该方案数+1。 2、队列为空,
阅读全文
摘要:题目传递门 一、深搜尝试 上来简单一看,无脑暴搜开始! 注意 //马所在的位置 ctrl[x][y] = 1; ctrl[x - 1][y - 2] = 1; ctrl[x - 2][y - 1] = 1; ctrl[x + 1][y + 2] = 1; ctrl[x + 2][y + 1] = 1
阅读全文
摘要:题目传递门 一、深度优先搜索 1、坐标 老鼠所在位置的用来表示,所以需要声明一个结构体,用来描述坐标: //坐标 struct Point { double x, y; } a[N]; 2、预处理 深度优先搜索最怕算的太多,能预处理的一定要提前进行预处理。本题中,每个结点间都
阅读全文
摘要:题目传递门 一、深搜步骤 1、深搜结束的条件 深度优先搜索本质上是递归,递归必然要求有出口,否则就是死循环,所以,深度优先想要考虑出口是什么。 (1)选择完了所有的数字,对应,还没有找到和为质数。 (2)已经选择够了个数字,就需要判断和是不是质数了,是就输出不是也没有必要继续了。 2、参
阅读全文