
常用基础算法
算法
ΘLLΘ
ΘLLΘ的博客!
展开
-
最短路问题
文章目录最短路问题一.朴素dijkstra算法二.堆优化版dijkstra 算法三.Bellman-Ford算法四.spfa 算法五.floyd算法六.一些题目题1:信使题2:香甜的黄油题3:最小花费七.附录(四种解法模板,转载自[AcWing](https://www.acwing.com/blog/content/405/))1.朴素dijkstra算法2.堆优化版dijkstra3.Bellman-Ford算法4.spfa 算法5.floyd算法 最短路问题 序:最短路问题:求图中某个点到另一个点所原创 2021-04-27 13:15:55 · 590 阅读 · 15 评论 -
[蓝桥杯2016决赛]路径之谜
#include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <set> #include <math.h> #include <map> using namespace std; typedef long long LL; const int N=25; int r[N],l[N]; int n; int dx原创 2021-04-14 21:19:08 · 177 阅读 · 1 评论 -
2019蓝桥杯省赛
迷宫问题: 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共10 步。其中D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行50 列),请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,原创 2021-03-31 21:09:29 · 138 阅读 · 0 评论 -
算法常用模板
第四部分:数学知识 一.质数问题 (1)试除法判定质数 int is_prime(int n) { if(n<2) return false; for(int i=2;i<=n/i;i++) if(n%i==0) return false; return true; } (2)试除法分解质因数 int divide(int n) { for(int i=2;i<=n/i;i++) if(n%i===0)转载 2021-03-21 10:16:45 · 153 阅读 · 0 评论 -
算法常用模板
第三部分:搜索与图论 这一篇我们讲最短路和最小生成树的问题: 一.最短路问题求解 (1)朴素dijkstra算法转载 2021-03-18 19:56:54 · 359 阅读 · 0 评论 -
算法常用模板
第三部分:搜索与图论 1.树与图的存储 树是一种特殊的图,与图的存储方式相同。 对于无向图中的边ab,存储两条有向边a->b, b->a。 因此我们可以只考虑有向图的存储。 (1) 邻接矩阵:g[a][b] 存储边a->b (2) 邻接表: //对于每个点k,开一个单链表,存储k所有可以走到的点。 //h[k]存储这个单链表的头结点 int h[N],e[N],ne[N],idx; //添加一条边a->b void add(int a,int b) { e[idx]=b,转载 2021-03-17 12:25:02 · 160 阅读 · 1 评论 -
算法常用模板
第二部分:数据结构 二.Trie树,并查集,堆,一般哈希,字符串哈希 1.Trie树 int son[N][26],cnt[N],idx; // 0号点既是根节点,又是空节点 // son[][]存储树中每个节点的子节点 // cnt[]存储以每个节点结尾的单词数量 // 插入一个字符串 void insert(string s) { int p=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; if转载 2021-03-16 10:47:51 · 114 阅读 · 0 评论 -
算法常用模板
第二部分:数据结构 一.数组模拟链表,栈,队列,单调栈,单调队列 1.链表 (一)单链表 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx; //初始化,第一个结点从0开始 void init() { head=-1; idx=0; } //在链表头插入一个数x void insert_head(int x) { e[idx]=x; ne[idx]=head转载 2021-03-16 09:26:33 · 168 阅读 · 0 评论 -
算法常用模板
第一部分:基础算法 三.高精度加减乘除算法总结 1.高精度加法 在这里插入代码片 2.高精度减法 在这里插入代码片 3.高精度乘法 在这里插入代码片 4.高精度除法 在这里插入代码片转载 2021-03-15 10:01:41 · 124 阅读 · 1 评论 -
算法常用模板
第一部分:基础算法 二.二分算法总结 **1.浮点数二分算法模板 ** bool check(double x){/**/};// 检查x是否满足某种性质 double bsearch_1(double l,double r) { const double eps=1e-6;// eps 表示精度,取决于题目对精度的要求 while(r-l>eps) { double mid=(l+r)/2; if(check(mid)) r=m转载 2021-03-15 09:08:37 · 149 阅读 · 0 评论 -
算法常用模板
第一部分:基础算法 1.快速排序算法模板 void quick_sort(int l,int r,int q[]) { if(l>=r) return; int i=l-1,j=r+1,x=q[l+r>>1]; while(i<j) { do i++;while(q[i]<x); do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]); } quick_sort(l,j,q); quick_sort(j+1,r,q); } ..转载 2021-03-15 08:39:22 · 170 阅读 · 2 评论