多源bfs 1.算法分析 多源bfs就是一开始有很多的源头,不只一个源点。处理的方法:一开始直接把所有源点放入队列;或者建立一个虚拟源点,虚拟源点到每个源点的距离为0 2.例题 acwing173矩阵距离 给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: d ...
分类:
其他好文 时间:
2020-07-27 13:41:08
阅读次数:
59
双端队列广搜 1. 算法分析 双端队列广搜算法只适用于边权只有0和1的情况,本质上是对dijkstra堆优化版本的再次优化。由于dijkstra堆优化版本每次要把最小值从队头拿出,然后更新其他值后插入队列。而当边权只有0和1时,当处理的边权为0,那么更新完仍然为最小值,直接放入队头;为1则插入队尾。 ...
分类:
其他好文 时间:
2020-07-27 13:40:39
阅读次数:
68
双向bfs和双向dfs 1. 算法分析 当进行的变换是可逆的时候,且规定步数的上限时,可以使用双向dfs或双向bfs从源点和终点一起搜索。这样可以把时间从O(n)->O(n/2) 如果dfs调栈超过1e5时,那么考虑双向bfs 写法技巧 双向dfs 第一个dfs先搜索前一半的空间,打表存储所有可达的 ...
分类:
其他好文 时间:
2020-07-27 13:39:54
阅读次数:
66
bfs最短路与最小步数模型 1. 算法分析 最短路:从A点走到B点的最小距离 最小步数:从状态A到状态B的最小变化数,本质就是最短路 2. 例题 2.1 最短路 acwing1076迷宫问题 给定N*N数组,每个元素只有0和1,求从(0, 0)走到(n - 1, n - 1)的最短路,输出其路径 # ...
分类:
其他好文 时间:
2020-07-27 13:39:28
阅读次数:
64
floodfill 1.算法分析 floodfill就是求出连通块的算法,一般可以采用dfs或者bfs,但是dfs容易爆栈,故而采用bfs为佳 2. 例题 acwing1097池塘计数 一块N * M的土地,其中有'W'和'.'组成,'.'为土地,'W'为水,水的八个方向可以连在一起形成池塘,问一块 ...
分类:
其他好文 时间:
2020-07-27 13:37:49
阅读次数:
56
102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] # ...
分类:
其他好文 时间:
2020-07-26 15:44:06
阅读次数:
63
题意: 给出$T$组数据,每组数据给出$N$和$M$,表示接下去$N$行$M$列。 图中“#”代表草,可以点燃;“.”点代表不能点燃;“#”和“.”都以走。 现在需要同时点两把火(位置可以重合),火的燃烧方向是上下左右,可以同时进行(注意!:不是一次只能一个方向,可以同时上下左右)。 若能烧完所有草 ...
分类:
其他好文 时间:
2020-07-26 15:19:03
阅读次数:
49
考察二叉树的遍历。判断前序遍历,与新增的前->右->左遍历结果是否一致。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义二叉树 struct TreeNode{ int val; struct Tree ...
分类:
其他好文 时间:
2020-07-26 01:57:55
阅读次数:
63
考察二叉树的遍历。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义二叉树 struct TreeNode{ int val; struct TreeNode* left; struct TreeNode ...
分类:
其他好文 时间:
2020-07-26 01:18:59
阅读次数:
54
1.图 图是一种非线性数据结构,是网络模型的抽象模型,图是一组由边连接的节点。 2.图的组成 一个图G = (V,E),V:一组顶点,E:一组边 3.强连通图 任何两个节点,它们之间都有路径到达,称为强连通图 4.邻接矩阵 5.领接表 6.字典 我采用是领接表的方法,所以这里我采用字典来存储,每个顶 ...
分类:
Web程序 时间:
2020-07-26 00:24:33
阅读次数:
88