摘要:
扩点最短路 不把实际位置看作图上的点,而是把实际位置和该位置的所有状态的组合看作是图上的点,BFS 或者 Dijkstra 的过程不变,只是增加了一些点。 864. 获取所有钥匙的最短路径 #include <iostream> #include <vector> #include <algorit 阅读全文
摘要:
普通堆实现的 Dijkstra 算法 时间复杂度为 O(m * logm),m 为边数 distance[i] 表示从源点到 i 点的最短距离,visited[i] 表示 i 节点是否从小根堆弹出过 准备好小根堆,小根堆存放记录:(x 点,源点到 x 的距离),小根堆根据距离排序 令 distanc 阅读全文
摘要:
位图 用 bit 组成的数组来存放值,用 bit 状态 1,0 代表存在不存在,取值和存值都用位运算。限制是必须为连续范围且不能过大。 实现 // 初始化位图大小,只支持 0 ~ n - 1 所有数字的增删改查 void Bitset(int n); void add(int num); void 阅读全文
摘要:
双向广搜 用途一:小优化 BFS 的剪枝策略,分两侧展开分支,哪侧数量少就从哪侧展开 用途二: 特征:全量样本不允许递归完全展开,但是半量样本可以完全展开。(完全展开的过程中有可能能够进行分组,进行常数级优化) 过程:把数据分成两部分,每部分各自展开计算结果,然后设计两部分结果的整合逻辑 127. 阅读全文
摘要:
图的广度优先遍历 1162. 地图分析 #include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; class Solution { public: int rows 阅读全文
摘要:
最小生成树 最小生成树(英语:Minimum spanning tree,简称MST)是指在无向带权图中选择一些边,在保证连通性的情况下,边的总权值最小 最小生成树不唯一 如果无向带权图有 n 个点,最小生成树一定有 n-1 条边 P3366 【模板】最小生成树 Kruskal 算法 把所有的边,根 阅读全文
摘要:
拓扑排序 LCR 113. 课程表 II #include <iostream> #include <vector> #include <queue> using namespace std; class Solution { public: vector<int> findOrder(int nu 阅读全文
摘要:
建图 邻接矩阵 #include <iostream> #include <vector> using namespace std; // 点的最大数量 int MAX_N = 11; // 邻接矩阵方式建图 vector<vector<int>> graph(MAX_N, vector<int>( 阅读全文
摘要:
洪水填充 设置路径信息进行剪枝和统计,类似感染的过程 路径信息不撤销,可以保证每一片的感染过程能够区分开 遍历次数和样本数量的规模一致 200. 岛屿数量 #include <iostream> #include <vector> #include <stack> #include <algorit 阅读全文