算法模板
文章平均质量分 72
千灵域
腾讯WXG数据开发,主要进行golang、C++程序的开发,并协助维护Spark和Flink任务。博客会在工作之余侧重其他内容,主要集中在编程知识上。
个人博客的gitpage:https://www.challengefilter.com/
展开
-
【图】单源最短路径dijkstra
O(n^2)级C算法,简易复习用 #include #include #include #include using 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 · 469 阅读 · 0 评论 -
【图】最小生成树kruskal
适合稀疏图, C语言注释版原创 2014-05-12 21:03:51 · 543 阅读 · 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 · 375 阅读 · 0 评论 -
高精度重载运算符的C++代码
高精度算法(压位存储)! 有的时候,数字会大到连long long都不能承受的程度。这时,我们可以自己模拟大数的各种运算。 所谓压位存储,就是在高精度数内部采用10000进制(即每四位放到一个数中)进行存储。它与10进制(即一个数位对应一个数)相比速度要快一些。 高精度数内部也可以采用100000000进制,但是这样就不能计算乘除法了。 (1) 定义 编程时这样做——假设hp是高精度类型转载 2014-11-03 16:36:07 · 2082 阅读 · 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 · 762 阅读 · 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 · 449 阅读 · 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 · 440 阅读 · 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 · 504 阅读 · 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 · 439 阅读 · 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 · 437 阅读 · 0 评论 -
【图】单源最短路径bellman-ford和SPFA
C++版本 #include #include //bellman-ford 求存在负边的最短路 (单源最短路径) #include using 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 · 540 阅读 · 0 评论 -
【图】BFS与DFS
BFS int 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 · 525 阅读 · 0 评论 -
【图】多源最短路径floyd
O(n^3),不过如果是优先队列优化过的dijkstra转载 2014-05-12 21:11:51 · 514 阅读 · 0 评论 -
【图】最小生成树算法prim
n^2级别,C int 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 · 534 阅读 · 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 · 1101 阅读 · 0 评论 -
快速排序(转自nocow)
收藏用 (言过其实了,C++ STL的Sort实现用的是Introsort,是快速排序的变种,主要是递归过深的时候自动转换为堆排或插入排序(是堆排还是插入排序还要视具体实现而定),可以保证最坏情况下还是O(nlogn),并且充分使用了尾递归优化(快排最后不是两个递归吗?最后一个递归可以不必真的递归,可以像gcd算法一样通过迭代参数来改善运行速度),STL快排可以经受任何实践的考验,而这段代码转载 2016-09-16 19:12:23 · 319 阅读 · 0 评论