
算法模板库
基本的算法模板库,简单易理解
This is bill
这个作者很懒,什么都没留下…
展开
-
四舍五入【模板】
自己写了一个round四舍五入模板:四舍五入代码模板:#include int round(double a){ if(a-(int)(a)>=0.5) return (int)(a)+1; else return (int)(a);}int main(){ double a; int result; while(scanf("%lf",&a原创 2013-10-28 10:17:25 · 1237 阅读 · 0 评论 -
素数筛【模板】
筛法求素数模板每次筛掉倍数,得到的一定是素数。#include #define MAXN 1000002int prime[MAXN]; //用筛法求素数,1代表不是素数(被筛掉)int main(){ //先打出素数表 prime[0]=prime[1]=1; //开始去掉prime[0]和prime[1] int i,j; for(i=2;i<原创 2013-10-28 10:24:16 · 1435 阅读 · 0 评论 -
堆排序【模板】
很认真地看完了《算导》的排序之前的所有部分,除了算法复杂度那一章的数学要求太高,难以完全驾驭以外,其他的部分还是很好理解的。。。争取把《算导》里面出现的算法都自己实现,制作自己的模板,以后好用。。。堆排序虽然在一般的时候是没有快排好用,但是在优先队列里面很好用,所以也是很有力的武器!这个堆排序模板是我基本完全按照《算法导论》里面自己一个字一个字的敲上去的,调试的时候修改了几个小地方:1.h原创 2013-10-30 11:42:37 · 2316 阅读 · 0 评论 -
快速排序【模板】
快排还是比堆排序的调用简单些,很快敲定了《算导》正文里面的快排 Partition 程序是由 N.Lomuto 提出的,与我们教科书上面的 Partition 不同,教科书上面的程序是由 Hoare 提出的,Hoare 是快排的发明者,很厉害的人!!这两种算法并没有本质上的差别,但是前者的思路更清晰#include //引用地址空间void exchange(int &a,i原创 2013-10-30 14:54:19 · 1213 阅读 · 0 评论 -
希尔排序【模板】
希尔排序用了用了更少的时间编出来:#include void Shellsort(int A[],int p,int r){ int d=r-p+1; //将 length(A) 赋给d int i,j,tmp; while(d>=1) { d/=2; for(i=p+d;i<=r;i++) { tmp=A[i]; j=i-d; //从i的前一个步原创 2013-10-30 15:15:16 · 1605 阅读 · 0 评论 -
平方根是否为整数
写1543的时候顺便写了一个判断一个数的平方根是否为整数的函数,以后留着备用。。。其实不难,但是用sqrt(1.0/3)那种写法不行,只能另辟蹊径。。。#include int Is_Cube(int n){ int i; for(i=1; ;i++) { if(i*i*i==n) return i; if(i*i*i>n) return 0; }原创 2013-11-07 21:02:55 · 2742 阅读 · 0 评论 -
起泡排序【模板】
这个起泡排序的 for 循环比较奇怪,注意。。。邓老师写的还是为了开发我们的思维。。。另外就是 swap 函数在 using namespace std; 中有现成的函数。。。#include using namespace std;void bubblesort(int A[],int n){ for(bool sorted=false;sorted=!sorted;n-原创 2013-11-09 12:10:51 · 1688 阅读 · 0 评论 -
归并求逆序对【模板】
代码:#include const int M=999999;int A[500];int cunt=0;int L[250],R[250];void Merge(int Left,int Middle,int Right){ int n1=Middle-Left+1; int n2=Right-Middle; for(int i=1;i<=n1;i++) L原创 2013-11-10 18:28:26 · 1343 阅读 · 0 评论 -
求先序遍历
代码如下:#include struct TreeNode{ struct TreeNode* left; struct TreeNode* right; char elem;};TreeNode* BinaryTreeFromOrderings(char* inorder, char* aftorder, int length){ if(le原创 2013-11-16 10:30:58 · 1244 阅读 · 0 评论 -
进制转换【模板】
很久没发帖子了,贴一个不是很容易看懂的进制转换代码,可以做模板,也可以用显示的栈来写:#include char digits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};//全局变量void convert(int y,int x){ if(x!=0) { convert(y,原创 2013-11-26 20:30:10 · 1262 阅读 · 0 评论 -
图的邻接表存储 c实现
图的邻接表存储 c实2011-10-07 10:34 4047人阅读 评论(2) 收藏 举报存储cstruct数据结构null编程 用到的数据结构是一个是顶点表,包括顶点和指向下一个邻接点的指针一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针刚开始的时候把顶点表初始化,指针指向null。然后边表插入进来,是转载 2013-12-26 19:42:34 · 1670 阅读 · 0 评论 -
拓扑排序
伪代码如下:1. 栈S初始化;累加器count初始化;2. 扫描顶点表,将没有前驱(即入度为0)的顶点压栈;3. 当栈S非空时循环 3.1 vj=退出栈顶元素;输出vj;累加器加1;3.2 将顶点vj的各个邻接点的入度减1;3.3 将新的入度为0的顶点入栈;4. if (count原创 2013-12-27 08:43:18 · 1658 阅读 · 0 评论 -
C双向链表
写了一个很简单的双向链表原创 2014-07-12 11:16:50 · 1161 阅读 · 0 评论 -
线段树和RMQ解析和模板
这几天在看RMQ的题目,但是很多RMQ的题目也可以用线段树解决。。。看来两者转载 2014-07-30 12:35:38 · 1669 阅读 · 0 评论 -
poj 3264 Balanced Lineup【RMQ】
这道题是poj上面RMQ最具代表性的一道题,没有之一题目也基本上就是一个裸RMQ的算法,看到这道题也可以用线段树解决,决定还是要出一个线段树的版本的,一道题搞懂两个知识点,多好!原创 2014-07-30 14:45:00 · 1176 阅读 · 0 评论 -
poj 2105 IP Address【模板 power2】
这道题就是一个字符串处理的问题,但是原创 2014-08-06 14:19:25 · 1060 阅读 · 0 评论 -
【c语言】三角形外心坐标
新学期d算法大作业,转载 2014-09-20 14:57:54 · 4391 阅读 · 0 评论 -
【进化版】三角形外心坐标和外接圆半径
#include #include typedef struct{ double x; double y;}myPoint;double distance(myPoint A,myPoint B){ double dis = (A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y); return sqrt(dis);}void mi原创 2014-09-20 15:37:47 · 2073 阅读 · 0 评论 -
poj1144 - tarjan求割点
何为割点?也就是题目中的关键点。在一个无向图中,去掉一个点,这个无向图会变成多个子图,那么这个点就叫做割点同理,割边也是如此,如果去掉一条边,能让无向图变成多个子图,那么这条边叫做割边,所谓的桥。 那么tarjan是如何求的割点的呢?如果u为割点,当且仅当满足下面的1/21、如果u为树根,那么u必须有多于1棵子树2、如果u不为树根,那么(u,v)为树转载 2014-10-02 14:27:08 · 1146 阅读 · 0 评论 -
KMP算法模板
用自己的方法写出来了,下标很容易错。。。其实感觉KMP算法还有改进的余地,因为 Pi[ ] 这个数组在计算的时候只会有两种情况:1、要么碰到不等的数了,就为02、要么继续相等,就+1#include #include using namespace std;int Pi[100]; //最终的数组/*******************************原创 2014-12-19 22:31:56 · 984 阅读 · 0 评论 -
基数排序【模板】
这是一个最简单的,以10为桶size的基数排序:int maxbit(int data[], int n) //辅助函数,求数据的最大位数{ int d = 1; //保存最大的位数 int p = 10; for(int i = 0; i < n; ++i) { while(data[i] >= p) { p *= 10; ++d; } } return原创 2015-05-07 14:16:48 · 1640 阅读 · 0 评论 -
【模板】c++ template模板实现string到Num的转换
很早以前就写了这个模板类的简单模板,但是没写成博客,方便以后自己找原创 2015-09-03 13:48:41 · 1229 阅读 · 0 评论 -
最大子段和【模板】
直接上模板:int MaxSub (int a[],int N)//此为只需要求最大的和,时间复杂度是O(n) { int *dp = new int(N); int max, i; max = dp[0] = a[0]; for (i=1; i<N; i++) { if (dp[i-1] > 0) dp[i] =原创 2015-09-18 21:29:15 · 1044 阅读 · 0 评论 -
素数筛【模板】
#include <iostream>#define MAXN 1<<15using namespace std;int prime[MAXN];//为0代表是素数int findPrime(){ //先打出素数表 prime[0]=prime[1]=1; int i,j; for(i=2;i<MAXN;i++) { if(prime[i原创 2015-12-13 18:38:19 · 1333 阅读 · 0 评论 -
归并排序【模板】
模板直接见代码:#include <iostream>using namespace std;const long M=999999999;void Merge(int A[],long Left,long Middle,long Right){ long n1=Middle-Left+1; long n2=Right-Middle; int *L = new int[n1原创 2016-03-13 10:43:27 · 1481 阅读 · 0 评论 -
Dijkstra算法【模板】
1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,E) 中,假设每条边 E[i原创 2016-03-20 19:32:25 · 2726 阅读 · 0 评论 -
Floyd算法思想
本来代码量如此小的算法不用出模板了,但是的确思想还是很好的。1.定义概览Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 2.原创 2016-03-20 19:34:05 · 8206 阅读 · 1 评论 -
快速排序【模板】
一、递归版本#include <iostream>#include <stdio.h>#include <cstring>#include <vector>#include <cmath>#include <algorithm>#include <set>#include <cassert>#include <time.h>#include <queue>#include <ma原创 2016-03-22 07:35:33 · 4472 阅读 · 1 评论 -
根据先序中序遍历建树【模板】
主要就是通过先序找到当前子树根节点,再用中序遍历分子树,不断递归下去。#include <iostream>#include <stdio.h>#include <cstring>#include <vector>#include <cmath>#include <algorithm>#include <set>#include <cassert>#include <time.h>原创 2016-03-24 10:37:15 · 3042 阅读 · 0 评论 -
二分查找【模板】
一、递归版本//有序数组递减排列int binarySearchRecusion(int* array,int len,int value){ if(len==0) return -1; int mid=(len-1)/2; if(array[mid]==value) return mid; if(array[mid]>value)原创 2016-03-26 17:33:56 · 1450 阅读 · 0 评论 -
最长公共子序列 LCS(模板) poj 1458
一、AC code(模板)#include <iostream>#include <stdio.h>#include <cstring>#include <vector>#include <cmath>#include <algorithm>#include <set>#include <cassert>#include <time.h>#include <queue>#incl原创 2016-04-04 13:44:40 · 1340 阅读 · 0 评论 -
回文子串(模板)Manacher O(n)算法
一、问题描述回文子串和回文子序列不同: 子串,一定要连续 子序列,不一定连续其实最长回文子串是可以转换成LCS来做的,具体方法就是: 将原串生成反向串,然后用dp求原串和反向串的LCS但是这样缺点也很明显的是O(n*n)的复杂度,即使优化到:滚动数组+下标找反向串,也不能从根本上解决这个算法的低效。如果想在 O(n) 时间内解决回文子串问题呢?答案就是Manacher算法,用一句话原创 2016-04-06 16:44:55 · 1072 阅读 · 0 评论 -
最大子段和【模板】
最简单的dp,甚至都不用dp数组就可以实现,一个tmp和一个max变量搞定#define MAXN 1002int num[MAXN];int whMaxSub(int a[],int len) { int tmp = INT_MIN; int subMax = INT_MIN; for (int i=0;i<len;++i) { if(tmp<0)原创 2016-04-10 18:11:37 · 880 阅读 · 0 评论 -
vs c++内存泄露检测【模板】
一、浅谈内存泄露wikipedia中这样定义内存泄漏: 在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。在以下情況,内存泄漏导致较严重的后果:(1)程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器原创 2016-04-18 16:50:59 · 1416 阅读 · 0 评论