算法模板类
smsmn
在学校曾获得过福建省大学生程序设计竞赛并参加过ACM/ICPC亚洲区的预选赛,曾获得过高等数学竞赛一等奖和全国数学建模竞赛福建赛区一等奖;对C#、.net和SQL熟悉,在学校用.net和C#做过教学管理系统;在学校通过了全国计算机四级和大学英语四级的考试。<br/>在工作的这一两年除了用C/C++进行三维开发之外,也涉及了网络编程的开发,对ASIO和socket熟悉。<br/>在杭州和厦门这段时间都是使用OpenGL进行开发,前者是做虚拟现实,后者是底层导航引擎开发。<br/>总之,我对于C/C++开发特别感兴趣,也想在三维、嵌入式、视频监控系统或者游戏方面有所发展。
展开
-
最短路径算法总结
<br />//Dijkstra(邻接矩阵)模板#include<iostream>using namespace std;#define M 100int maxData=10000000;int graph[M][M];int d[M];int pre[M]; //存储节点前驱 bool final[M];int t,n;void Dij(int src){ int i,j; int minData; in原创 2010-11-06 19:48:00 · 520 阅读 · 0 评论 -
字典序全排列
<br />//字典序全排列.cpp#include<iostream>#include<string>using namespace std;#define M 100int count;void prin(int *a,int m){ int i; cout<<count++<<": "; for(i=0;i<m-1;i++) cout<<a[i]<<" "; cout<<a[m-1]<<endl;}void genperm(int *a,int原创 2010-11-06 20:03:00 · 470 阅读 · 0 评论 -
无向图的割点算法
<br />//深度优先搜索生成数的根root是图G的割点,当且仅当,root至少有两个节点;//不是深度优先搜索生成树的根的节点v是图G的割点,当且仅当,v的所有后裔都没有后退边与v的祖先顶点相连• #include<stdio.h>• #include<string.h>• #define SIZE 150• #define MAX 0x7fffffff• int map[SIZE][SIZE];• int n;• int low[SIZE];//low[u]表示从u出发原创 2010-11-06 20:01:00 · 808 阅读 · 0 评论 -
网络流算法
<br />EK算法:<br />• //网络流EK算法• #include<iostream>• #include<queue>• using namespace std;• #define INF 0x7fffffff• #define min(a,b) ((a)<(b)?(a):(b))• int cap[201][201],flow[201][201],a[201];• //cap[][]表示最大容量,flow[][]表示当前流量• int s,t,n,m;•原创 2010-11-06 20:00:00 · 425 阅读 · 0 评论 -
凸包问题
<br />计算凸包直径:<br />#include <cmath>#include <algorithm>#include <iostream>using namespace std;#define MAXN 50005struct Point{ int x, y; bool operator < (const Point& _P) const { return y<_P.y||(y==_P.y&&x<_P.x); }原创 2010-11-06 19:57:00 · 743 阅读 · 0 评论 -
二分图最大权值匹配KM算法
<br />#include <cstdio>#include <climits> #include <iostream> using namespace std; const int MAX = 1024; int n; // X 的大小int weight [MAX] [MAX]; // X 到 Y 的映射(权重) int lx [MAX], ly [MAX]; // 标号bool sx [MAX], sy [MAX]; // 是否被搜索过int match [MAX];原创 2010-11-06 19:55:00 · 835 阅读 · 0 评论 -
差分约束系统
<br />//差分约束系统(构建单源最短路径)要用fullman算法,有存在权值为负的边#include<iostream>using namespace std;const int M=120;const int inf=0x7ffff;struct node{ int s,e,v;}edge[M];int n,m,d[M];bool bellman_flody(){ int i,j; for(i=0;i<=n+1;i++) d[i]=inf;原创 2010-11-06 19:53:00 · 429 阅读 · 0 评论 -
最小生成树算法模板
//kruskal算法模板#include#includeusing namespace std;#define M 100 //最多边数#define N 100 //最多顶点数typedef struct edge{ int a; int b; int value;}edge;edge edges[M];int final[N]; //存储父节点 int nodecount[N]; //存储该节原创 2010-11-06 19:50:00 · 757 阅读 · 0 评论 -
Plóya定理
<br />• //Plóya定理的应用,要记得考虑是否要考虑旋转或者翻转等问题• #include<stdio.h>• #include<math.h>• int gcd(int a,int b)• {• if(b==0)• return a;• else• return gcd(b,a%b);• }• int main()• {• // freopen("in.txt","r",stdin);• int c, s, i;• __in原创 2010-11-06 19:49:00 · 441 阅读 · 0 评论 -
AC自动机算法
/*程序说明:多模式串匹配的AC自动机算法此题通过hdu 2222自动机算法可以参考《柔性字符串匹配》里的相应章节,讲的很清楚*/#include #include const int MAXQ = 500000+10;const int MAXN = 1000000+10;const int MAXK = 26; //自动机里字符集的大小 struct TrieNode{ TrieNode* fail; TrieNode* next[M原创 2010-11-06 19:43:00 · 475 阅读 · 0 评论 -
整数点与Pick定理
<br />//Pick定理 设已整数点为顶点的多边形的面积为S,多边形内部的整数点为N,多边形边界上的整数点数为L//则 N+1/2 L-1=S#include<stdio.h>#include<math.h>typedef struct Point{ int x,y;}POINT;int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}int onedge(int n,原创 2010-11-06 20:02:00 · 512 阅读 · 0 评论 -
拓扑排序
<br />//拓扑排序模板(邻接矩阵)表示#include<iostream>using namespace std;#define M 100bool graph[M][M]; //邻接阵 int indegree[M]; //记录顶点的入度 int n;//n为顶点个数 void topsort(){ int i,j,k; for(i=1;i<=n;++i) //遍历n次每次找出一个顶点 { for(j=1;j<=n原创 2010-11-06 19:58:00 · 370 阅读 · 0 评论 -
二分图匈牙利算法
<br />#include<stdio.h>#include<string.h>int n1,n2,m,ans;//n1代表集合1的顶点个数,n2,m边数,ans最大匹配数int result[101];//记录V2中的点匹配的点的编号 bool state[101];//记录V2中的每个点是否被搜索过 bool data[101][101];//邻接矩阵 true代表有边相连 void init(){ int t1,t2,i; memset(data,false,si原创 2010-11-06 19:54:00 · 395 阅读 · 0 评论 -
字典树(Trie树)
<br />//trie数(字典树)的简单插入与查找(至少要开四倍的空间)#include <iostream>using namespace std;const int branchNum = 26; //声明常量 int i;struct Trie_node{ bool isStr; //记录此处是否构成一个串。 Trie_node *next[branchNum];//指向各个子树的指针,下标0-25代表26字符 Trie_node():i原创 2010-11-06 19:52:00 · 390 阅读 · 0 评论 -
RMQ问题
<br />//rmq问题#include <cstdio>#include <cstring>using namespace std;const int maxn=65536,maxf=17;int v1[maxn][maxf];//v1[n][f]表示s[n..n+2^f)中的最大值int v2[maxn][maxf];//v2[n][f]表示s[n..n+2^f)中的最大值int N,Q;inline int max(int a,int b){return a>原创 2010-11-06 19:51:00 · 386 阅读 · 0 评论 -
强连通分支算法
<br />#include<iostream>using namespace std;#define MAXN 10000//最多的点数#define MAXM 10000//最多的边数struct Node{ int to; int next;}graph[MAXM];int head[MAXN];int n, m;//顶点数,边数int low[MAXN], dfn[MAXN];//low[i]表示能回溯到的最小节点,dfn[i]表示访问的顺序int b原创 2010-11-15 09:42:00 · 1006 阅读 · 0 评论