![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AcWing 算法基础课 提高课 搜索
AcWing 算法基础课 提高课 搜索
ZhgDgE
这个作者很懒,什么都没留下…
展开
-
【搜索】双向DFS
双向DFS和双向BFS一样,双向DFS也是在时间上进行了优化。详细讲解:AcWing 171. 送礼物Acwing 171. 送礼物题解:AcWing 171. 送礼物AcWing 171. 送礼物 - 双向DFSAC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 47;int n;LL w;LL tmp[16777216]; int pos;原创 2021-11-15 21:52:16 · 126 阅读 · 0 评论 -
【搜索】DFS之剪枝与优化
DFS之剪枝与优化剪枝方法:优化搜索顺序排除等效冗余可行性剪枝最优性剪枝小猫爬山题解:AcWing 165. 小猫爬山AC代码【两种剪枝】:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 20;int n, m; int w[N];int ans = 30;int sum[N];void dfs(int now, int k)原创 2021-11-15 21:46:34 · 730 阅读 · 0 评论 -
【搜索】双向广搜
双向广搜双向广搜是单向广搜在时间复杂度上的优化版本,保证在有解情况下效率更高。字串变换代码(y总):#include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <unordered_map>using namespace std;const int N = 6;int n;string A, B;string原创 2021-11-15 21:34:43 · 375 阅读 · 0 评论 -
【搜索】双端队列广搜
双端队列广搜算法概述: 双端队列广搜是特殊的 dijkstra 算法,用来解决图中边的权值只有0或者1的最短路问题。算法复杂度是线性的。具体操作见链接。注意: 当一个点出队列的时候才意味着更新到了最短距离(和dij算法一样)。因此当一个点被其他点更新时,有可能不是最短距离。讲解链接:AcWing 175. 电路维修模板: 双端队列求最短路模板175. 电路维修题解:AcWing 175. 电路维修AC代码:#include<bits/stdc++.h>using name原创 2021-11-15 21:24:56 · 269 阅读 · 0 评论 -
【搜索】最小步数模型
最小步数模型有三个点要思考: 1. 如何记录状态 2. 如何记录步数 3.如何标记记录状态可以用int,string之类的,放到队列中记录步数可以用 map 记录,标记的话当 mp.count() == 0 时代表未访问过。八数码AC代码(19MB):#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e5 + 10;string st, ed = "1234原创 2021-11-15 21:01:49 · 92 阅读 · 0 评论 -
【搜索】多源BFS
多源BFS问题: 求出所有多源起点(可看成一个点)到所有点的最短距离。矩阵距离核心代码: for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(str[i][j] == '1') dis[i][j] = 0, que.push({i, j}); // 把源点都压入队列[题目&题解]Distinctive Character(多源bfs)AC代码:#include<bits原创 2021-11-15 20:49:53 · 58 阅读 · 0 评论 -
【搜索】最短路模型
最短路模型当边权相等且非负时,可以用bfs寻找单源点最短路或多源点最短路。bfs找最短路要保证队列“两段性”和“单调性”。代码中记录距离,可以一并压入队列,也可以使用 dis[] 数组,同时充当记录距离和标记的角色。dis[] 初始化 -1 ,当 dis[i] == -1 时,表示未访问过,否则表示已访问过。迷宫问题AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;原创 2021-11-15 20:40:01 · 140 阅读 · 0 评论 -
【搜索】Flood Fill 解决连通块问题
算法思路博客: AcWing 1097. 池塘计数AcWing 1097. 池塘计数思路:bfs 寻找连通块数量#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e3+10;int n, m;char str[N][N];bool vis[N][N];int dx[] = {0, 0, 1, 1, 1, -1, -1, -1}, dy[] = {1, -1, 1,原创 2021-11-15 20:29:45 · 239 阅读 · 0 评论 -
【搜索】DFS && BFS 基本框架
深度优先遍历int dfs(int u) // 保证进入dfs为有效且未访问状态,在进入dfs之后标记{ st[u] = true; // 标记 for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (!st[j]) dfs(j); // 如果是无效状态或访问过,不进入 }}广度优先遍历queue<int> q;st[1] = true; // 表示1号原创 2021-11-15 20:24:04 · 77 阅读 · 0 评论 -
【目录】搜索
Acwing 算法课1 DFS && BFS 基本框架BFS2.1 Flood Fill 解决连通块问题2.2 最短路模型2.3 多源BFS2.4 最小步数模型2.5 双端队列广搜2.6 双向广搜DFS3.1 DFS之剪枝与优化3.2 双向DFS原创 2021-11-15 20:21:59 · 206 阅读 · 0 评论