算法模板
文章平均质量分 72
千灵域
腾讯WXG数据开发,主要进行golang、C++程序的开发,并协助维护Spark和Flink任务。博客会在工作之余侧重其他内容,主要集中在编程知识上。
个人博客的gitpage:https://www.challengefilter.com/
展开
-
【图】单源最短路径dijkstra
O(n^2)级C算法,简易复习用#include#include#include#includeusing namespace std;const int INF = 1000000000;const int MAXN = 1000;int n, m;int v[MAXN], d[MAXN], G[MAXN][MAXN];int main() {原创 2014-05-12 21:07:57 · 452 阅读 · 0 评论 -
【图】最小生成树kruskal
适合稀疏图,C语言注释版原创 2014-05-12 21:03:51 · 525 阅读 · 0 评论 -
【算法学习】二分图最大匹配之初始:匈牙利算法
邻接矩阵版本int xN, yN; // 表示X、Y两部分点的数目。int matchX[N], matchY[N]; // 表示与对应的X、Y部分匹配的点。bool used[N]; // 标记y[b]中的点是否被使用过。bool SearchPath(int x) // 从x出发寻找增广路,如果找不到则返回false。{ for(int y = 0; y转载 2014-11-04 15:42:24 · 362 阅读 · 0 评论 -
高精度重载运算符的C++代码
高精度算法(压位存储)!有的时候,数字会大到连long long都不能承受的程度。这时,我们可以自己模拟大数的各种运算。所谓压位存储,就是在高精度数内部采用10000进制(即每四位放到一个数中)进行存储。它与10进制(即一个数位对应一个数)相比速度要快一些。高精度数内部也可以采用100000000进制,但是这样就不能计算乘除法了。(1) 定义编程时这样做——假设hp是高精度类型转载 2014-11-03 16:36:07 · 1964 阅读 · 0 评论 -
逆序对的递归求法
int cnt=0; // 逆序对个数int a[100002], c[100002];void MergeSort(int l, int r) // r=右边界索引+1{ int mid, i, j, tmp; if (r>l+1) { mid = (l+r)/2; MergeSort(l, mid); MergeSort(mid, r);转载 2014-10-27 21:43:15 · 741 阅读 · 0 评论 -
【图】网络流ISAP
struct ISAP { int n, m, s, t; vector edges; vector G[maxn]; // 邻接表,G[i][j]表示结点i的第j条边在e数组中的序号 bool vis[maxn]; // BFS使用 int d[maxn]; // 从起点到i的距离 int cur[maxn]; // 当转载 2014-06-26 21:04:10 · 433 阅读 · 0 评论 -
【图】Dinic(n^2m)
struct Edge{ int from,to,cap,flow; void AddEdge(int from,int to,int cap) { edges.push_back((Edge){from,to,cap,0}); edges.push_back((Edge){to,from,0,0}}); m=edges.size(); G[from].push_bac转载 2014-06-26 16:28:59 · 420 阅读 · 0 评论 -
【图】最小费用最大流MCMF
struct Edge{ int from,to,cap,flow,cost;};struct MCMF{ int n,m,s,t; vector edges; vector G[maxn]; int inq[maxn]; int d[maxn]; int p[maxn]; int a[maxn]; void init(int n) { this->n=n;转载 2014-06-26 21:31:16 · 480 阅读 · 0 评论 -
【图】二分图匹配KM(4次方)
KMO(n^4)int W[maxn][maxn],n;int Lx[maxn],Ly[maxn];//顶标int left[maxn];//left[i]为右边第i个点的编号bool S[maxn],T[maxn]; //S[i]和T[i]为左或右第i个点是否已经被标记bool match(int i)//找到增广路{ S[i]=true; for(int j转载 2014-05-12 21:16:31 · 420 阅读 · 0 评论 -
【图】O(VE)的匈牙利(C)
#include#include bool g[201][201];int n,m,ans;bool b[201];int link[201]; bool init(){ int _x,_y; memset(g,0,sizeof(g)); memset(link,0,sizeof(link)); ans=0;转载 2014-06-24 21:52:00 · 422 阅读 · 0 评论 -
【图】单源最短路径bellman-ford和SPFA
C++版本#include#include//bellman-ford 求存在负边的最短路 (单源最短路径)#includeusing namespace std;const int INF = 1000000000;const int MAXN = 1000;const int MAXM = 100000;int n, m;int first[MA转载 2014-05-12 21:15:07 · 520 阅读 · 0 评论 -
【图】BFS与DFS
BFSint discovered[MAX];int processed[MAX];int parent[MAXV];void bfs(graph *g,int start){ int q[MAXQ]; int head=1,tail=1,num=0; int v; //队首元素 int i;//计数器 memset(q,0,sizeo原创 2014-05-12 21:18:51 · 505 阅读 · 0 评论 -
【图】多源最短路径floyd
O(n^3),不过如果是优先队列优化过的dijkstra转载 2014-05-12 21:11:51 · 493 阅读 · 0 评论 -
【图】最小生成树算法prim
n^2级别,Cint lowcost[MAXN],closest[MAXN];//lowcost记录到最小生成树的距离,closest为前驱数组 int prim(int v0){ int i,j,mindis,minone; int ans = 0;/*用来记录最小生成树的总长度*/ /*各点距离初始化*/ for(i = 0;i < n;i+原创 2014-05-12 21:00:36 · 514 阅读 · 0 评论 -
【精确覆盖问题】DLX算法
数独问题最优算法// 行编号从1开始,列编号为1~n,结点0是表头结点; 结点1~n是各列顶部的虚拟结点struct DLX { int n, sz; // 列数,结点总数 int S[maxn]; // 各列结点数 int row[maxnode], col[maxnode]; // 各结点行列编号 int L[maxnode], R[maxnode], U[转载 2014-05-12 21:25:15 · 1046 阅读 · 0 评论 -
快速排序(转自nocow)
收藏用(言过其实了,C++ STL的Sort实现用的是Introsort,是快速排序的变种,主要是递归过深的时候自动转换为堆排或插入排序(是堆排还是插入排序还要视具体实现而定),可以保证最坏情况下还是O(nlogn),并且充分使用了尾递归优化(快排最后不是两个递归吗?最后一个递归可以不必真的递归,可以像gcd算法一样通过迭代参数来改善运行速度),STL快排可以经受任何实践的考验,而这段代码转载 2016-09-16 19:12:23 · 293 阅读 · 0 评论