![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM--搜索
ACM--搜索
「已注销」
“没有人能把你变好,
时间和经历只是陪衬。
支撑你变得越来越好的,是你坚强的意志、修养、品行,以及不断的反思和修正。”
展开
-
floodfill
floodfill1.算法分析floodfill就是求出连通块的算法,一般可以采用dfs或者bfs,但是dfs容易爆栈,故而采用bfs为佳2. 例题acwing1097池塘计数题意:一块N * M的土地,其中有’W’和’.‘组成,’.'为土地,'W’为水,水的八个方向可以连在一起形成池塘,问一块土地上有多少个池塘? N,M~1e3代码:#include <bits/stdc++.h>using namespace std;int const N = 1e3 + 10;i原创 2020-09-21 15:25:37 · 68 阅读 · 0 评论 -
dfs连通性模型
dfs连通性模型1. 算法分析使用dfs来判断是否两个点连通,也可以通过dfs来做计数2. 例题acwing1112迷宫题意:T个测试样例,每个测试样例输入一个N,表示网格大小。网格为N*N的二维网格,给定起点和终点,问起点能否到达终点代码:#include <bits/stdc++.h>using namespace std;int const N = 1e2 + 10;int T, n, sx, sy, ex, ey, st[N][N];char a[N][N];原创 2020-09-21 15:24:53 · 203 阅读 · 0 评论 -
bfs最短路与最小步数模型
文章目录bfs最短路与最小步数模型1. 算法分析2. 例题2.1 最短路2.2 最小步数2.2.1 基础最小步数模型2.2.3 有条件的最小步数模型2.2.3 卡内存+有条件的最小步数模式2.2.4 思维最小步数bfs最短路与最小步数模型1. 算法分析最短路:从A点走到B点的最小距离最小步数:从状态A到状态B的最小变化数,本质就是最短路2. 例题2.1 最短路acwing1076迷宫问题题意:给定N*N数组,每个元素只有0和1,求从(0, 0)走到(n - 1, n - 1)的最短路,输出原创 2020-09-20 01:19:28 · 222 阅读 · 0 评论 -
双向bfs和双向dfs
双向bfs和双向dfs1. 算法分析当进行的变换是可逆的时候,且规定步数的上限时,可以使用双向dfs或双向bfs从源点和终点一起搜索。这样可以把时间从O(n)->O(n/2)如果dfs调栈超过1e5时,那么考虑双向bfs写法技巧双向dfs第一个dfs先搜索前一半的空间,打表存储所有可达的值第二个dfs搜索后一半的空间,然后查询是否在前一半空间中出现过双向bfs维护两个队列,当两个队列均非空时才能继续进行循环。循环内不断对元素较少的那个队列进行bfs操作2. 例题2.1原创 2020-09-20 01:17:37 · 490 阅读 · 0 评论 -
双端队列广搜
文章目录双端队列广搜1. 算法分析2. 例题双端队列广搜1. 算法分析双端队列广搜算法只适用于边权只有0和1的情况,本质上是对dijkstra堆优化版本的再次优化。由于dijkstra堆优化版本每次要把最小值从队头拿出,然后更新其他值后插入队列。而当边权只有0和1时,当处理的边权为0,那么更新完仍然为最小值,直接放入队头;为1则插入队尾。2. 例题acwing175电路维修题意:有一个R*C的电路板,电路板的如下:初始在左上角,现在要走到右下角。只有当线路连通才能走,问最少要改变几个电路节原创 2020-09-20 01:16:39 · 127 阅读 · 0 评论 -
多源bfs
文章目录多源bfs1.算法分析2.例题多源bfs1.算法分析多源bfs就是一开始有很多的源头,不只一个源点。处理的方法:一开始直接把所有源点放入队列;或者建立一个虚拟源点,虚拟源点到每个源点的距离为02.例题acwing173矩阵距离题意:给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:dist(A[i][j],A[k][l])=|i−k|+|j−l|输出一个N行M列的整数矩阵B,其中:B[i][j]=min(1≤x≤N,1≤y≤M,A[x][y原创 2020-09-20 01:15:48 · 176 阅读 · 0 评论 -
迭代加深
迭代加深1. 算法分析迭代加深就是防止答案在比较浅的层时,dfs搜索到很深而找不到答案的情况,通过设置一个最大迭代深度来解决这个情况2. 例题acwing170加成序列题意:满足如下条件的序列X(序列中元素被标号为1、2、3…m)被称为“加成序列”:1、X[1]=12、X[m]=n3、X[1]<X[2]<…<X[m-1]<X[m]4、对于每个 k(2≤k≤m)都存在两个整数 i 和 j (1≤i,j≤k−1,i 和 j 可相等),使得X[k]=X[i]+X[j]。原创 2020-09-20 01:15:15 · 595 阅读 · 0 评论