- 博客(34)
- 资源 (2)
- 收藏
- 关注
原创 《算法导论:快速排序》:这种很优秀,代码简单,效率高,并且划分标准.
<br />#include <stdio.h>int partition(int *A,int p,int r){ int x=A[r]; int i=p-1; for(int j=p;j<=r-1;j++) { if(A[j]<=x) { i=i+1; int t=A[i]; A[i]=A[j]; A[j]=t; } } A[r]=A[i+1]; A[i+1]=x; return i+1;}void
2010-06-30 13:23:00 1578
原创 NP问题,最小顶点覆盖;主要是编程技巧;用了set,效率高,空间小,图用邻接表存储;
<br />#include <iostream>#include <set>#include <vector>using namespace std;/* Graph input*/const int SIZE = 1000;int u[SIZE],v[SIZE],m;set<int> vis;vector<int> cover;typedef struct node{ node() { v=-
2010-06-28 13:02:00 1623 4
原创 FFT快速傅里叶变换;
<br />#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <algorithm>/*********************************/* π的一个近似值* 其他一些常量/*********************************/const double PI = 3.1415926535898;const int SI
2010-06-25 23:07:00 1217
原创 动态规划小题目;
<br />#include <stdio.h>const int M = 1000;int input[M][M];int row[M];int col[M];int m,n;void dpCol(int r){ int c=input[r][n-1],d=0; int i; for(i=n-2;i>=0;--i) { int a=input[r][i]+d,b=c; d=c; c = a > b ? a:b; } ro
2010-06-24 22:39:00 1156
原创 差分约束系统的图解法; 形式很特殊的一种线性规划问题; 可以转化为求带负边最短路问题;
<br />#include <stdio.h>/*********************************/* 差分系统的约束图* 由于bellman算法只需要边的信息* 所以只存边的相关信息就可以了/*********************************/const int MAXN = 10000;int u[MAXN],v[MAXN],w[MAXN];int dist[MAXN];int n,m;/*******
2010-06-23 15:57:00 1931
原创 强连通分量算法; 重在理解原理分析 ; 算法导论讲的很明白;
<br />#include <stdio.h>#include <string.h>const int MAXN = 10000;/*********************************/* 图G的邻接表表示/*********************************/int first1[MAXN];int next1[MAXN];int u1[MAXN],v1[MAXN];/************************
2010-06-23 15:51:00 1584
原创 Kmp算法; 建立在有限自动机理解基础上; 思想相当简单了;
<br />#include <stdio.h>#include <string.h>/*********************************/* KMP算法* 预处理时间:O(m), 运行时间O(n)* 改进了状态机算法的预处理时间* 依旧利用后缀最前前缀原理* 理解有限自动机后理解此算法/*********************************/const int MAXN=10000;char T[MAXN],P
2010-06-22 13:55:00 1011
原创 串匹配的有限自动机,说白了是一种状态转移函数;
<br />#include <cstdio>#include <algorithm>#include <cstring>using namespace std;/*********************************/* 有限自动机 字符串匹配算法* 预处理时间:* O(m^3 * numOf(charactors in string)* 匹配时间:* O(n)* 关键:构造状态变迁函数,复杂度较高,思想一流/******
2010-06-21 23:56:00 1075
原创 Rabin-Karp-MATCHER字符串匹配算法; 一种效率还不错的匹配算法; 思想是关键.
<br />#include <stdio.h>#include <string.h>/*********************************/* n:文本串T长度* m:模式串P长度* h:d^(m-1)* d:进制基数(这里采用26进制)* t[s]:对应位移s的文本串T子串的d进制表示* p:模式串P的d进制表示* q:对d进制整数模q,q是素数(越大越容易排出非法位移s,但是过大会导致模运算溢出,这里取13)/***
2010-06-21 19:23:00 987 1
原创 二进制压缩存储+广搜;
<br />#include <iostream>#include <queue>#include <time.h>#include <windows.h>using namespace std;const int need = 3125010; //足够10000 * 10000 个位const int col=10000;unsigned int G[need],isV[need]; //图G , 访问标记isVint n,k;int cnt;
2010-06-18 11:31:00 600
原创 最小费用最大流算法; SPFA找最小耗费增广路; 算法简明扼要;
<br />#include <iostream>#include <queue>using namespace std;/*********************************/* 最小割最大流算法* 可以在求得最大流的同时获取最小割集S,T* 邻接矩阵存储各类信息/*********************************/#define INF 1000000const int MAXN=1000;int cap[MAXN][MAXN
2010-06-17 16:18:00 4787 1
原创 最大流最小割算法; BFS搜索增广路径; 算法简单,打印结果也比较清晰;
<br />#include <iostream>#include <queue>using namespace std;/*********************************/* 最小割最大流算法* 可以在求得最大流的同时获取最小割集S,T* 邻接矩阵存储各类信息/*********************************/#define INF 1000000const int MAXN=1000;int cap[MAXN][MAXN
2010-06-17 14:55:00 3508 3
原创 Bellman变形得来的SPFA最短算法(不能含负环);Floyd求两点间最短路,求有向图的闭包;
<br />#include <iostream>#include <queue>using namespace std;const int MAXN=100;/*********************************/* SPFA算法需要的空间分配/*********************************/queue<int> q;bool inq[MAXN];/*********************************/*
2010-06-17 10:26:00 1172
原创 Dijkstra单源最短路径算法; 优先队列+静态数组邻接表; STL优先队列还是没想明白排序原则;
<br />#include <iostream>#include <queue>using namespace std;const int MAXN =1000000;int u[MAXN];int v[MAXN];int w[MAXN];int d[MAXN];int first[MAXN];int next[MAXN];bool done[MAXN];typedef pair<int,int> pii;priority_queue<p
2010-06-16 21:07:00 1402
原创 并查集+Kruscal最小生成树; 温习了一下并查集, 同时又对静态数组的动态使用体会了一下;.
#include #include const int MAXN=10000;int u[MAXN]; //边的起点int v[MAXN]; //边的终点int w[MAXN]; //边的权值int r[MAXN]; //间接排序int p[MAXN]; //并查集int n; //顶点的数量int m; //边的数量int cmp(const void *a,const void *b){ int *p=(int*)a; int *q=(in
2010-06-16 18:31:00 745
原创 算术表达式构造二叉树; 二叉树计算算术表达式;
<br />#include <iostream>using namespace std;const int MAXN = 1000;int lch[MAXN],rch[MAXN];char op[MAXN];char input[MAXN];int nc=0;/*********************************/* 递归构造表达式树* 每次找括号外的+ - * /* 优先+ - 划分, 其次* /划分* 原则
2010-06-16 17:37:00 5349 1
原创 树上的动态规划;树的最大独立集;刷表DP,子问题彼此独立没有交集; 无根树转化有根树;
<br />#include <iostream>#include <vector>#include <algorithm>using namespace std;/*********************************/* 可以动态变化的邻接矩阵* G[i]表示顶点i的邻接点/*********************************/const int MAXN=100;vector<int> G[MAXN]; //无根树int l[M
2010-06-16 16:09:00 3559 2
原创 编码与解码;字符串字典序问题;根据字符串找位序,根据位序找字符串;
#include using namespace std;const int MAXSIZE=100000;char str[MAXSIZE];char out[MAXSIZE];int l[26];int len;int num;int g(int n){ int ret=1; for(int i=1;i
2010-06-16 01:12:00 973 1
原创 数论内容;各种模运算;筛法打素数表;
<br />#include <iostream>#include <cmath>#include <cstring>using namespace std;/*********************************/* gcd(int a,int b)* 原名:欧几里得算法* 辗转相除法求最大公约数* 无所谓a,b大小次序./*********************************/int gcd(int a,int
2010-06-15 18:23:00 1218
原创 集合上的DP,采用二进制与阶段的隐式使用;
<br />#include <iostream>using namespace std;#define MAX 1000000const int NUM = 20;int G[NUM][NUM];int n;int d[1<<NUM];int ret(){ d[0]=0; for(int ss=1;ss<(1<<n);++ss) { int i,j; d[ss]=MAX; //表示不可能
2010-06-15 13:04:00 702
原创 最大子段和O(n)算法;不是动态规划;思路挺独特;
<br />#include <iostream>using namespace std;int input[10000];int n;int minS[10000];int s[10000];int main(){ scanf("%d",&n); int i; s[0]=0; for(i=1;i<=n;++i) { scanf("%d",&input[i]); s[i]=s[i-1]+
2010-06-14 13:02:00 667
原创 8数码,静态数组+自建开散列哈希表;
<br />#include <stdio.h>#include <string.h>#include <stdlib.h>typedef int State[9];const int MAXSTATE=1000000; //状态数不会超过这个,9!种State st[MAXSTATE],goal; //状态数组, 目标状态int dist[MAXSTATE]; // 已走步数int fa[MAXSTATE]; // 前趋状态/*移动方向*/const int d
2010-06-13 19:31:00 860
原创 埃及分数;枚举递归树深度+回溯;习惯这些繁琐的搜索题;
<br />#include <stdio.h>#include <stdlib.h>#define MAX 10000000int a,b; //a<bint final[100];int temp[100];int n;int find=0;void score(int x,int y,int m){ if(m==n) { if(y%x==0&&y>x*temp[m-1]) { te
2010-06-13 17:04:00 635
原创 带宽问题; 回溯法+剪枝的巅峰杰作;算法经典入门;
<br />#include <stdlib.h>#include <stdio.h>#include <string.h>#define MIN -10000000typedef struct{ int edge[100][100]; int vex;}Graph;int permu[100]; //结点排列次序int bPermu[100]; //最佳排列int appear[100]; //使用标记int rank[100]; /
2010-06-13 13:00:00 1109
原创 递归求重复数全排列;
<br />#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>int input[20];int tOut[20];int app[20];int tApp[20];int n;int cmp(const void *a,const void *b){ int *c=(int*)a; int *d=(int*)b; if(*c==*d) { r
2010-06-12 23:14:00 665
原创 滑雪DP;POJ1088;
<br />#include <stdlib.h>#include <stdio.h>#define LOWEST -1000000int row,col,map[1000][200],dp[1000][200];int direc[4][2]={{0,1},{-1,0},{0,-1},{1,0}};int main(){ int i,j,result=LOWEST,tmp; scanf("%d%d",&row,&col); for(i=0;i<row
2010-06-05 22:00:00 663
原创 求二维平面最近点对算法; 分治思想; 递归写的好精准,模仿ACM模板写的.;很多细节处理的很漂亮;
<br />#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>const int N=100005;const double MAX= 10e100,eps=0.00001; //mark!struct Point{ double x,y; int index;};Point a[N],b[N],c[N];double closest(Point *
2010-06-04 11:07:00 1836 1
原创 Graham扫描法求最小凸包; 写的比较杂乱, 以后争取再写个好看的;
<br />#include <iostream>#include <queue>#include <vector>#include <stack>using namespace std;//点结构体typedef struct{ int x,y;}Point;//左下角点PoPoint leftBotm;//极角比较函数int leftTurn(Point p1,Point p2,Point p3) //p1:next-top, p2:top
2010-06-03 21:48:00 587
原创 如何确定两个线段是否相交;叉积的利用;
<br />#include <iostream>using namespace std;typedef struct{ int x,y;}Point;//判断线段端点在直线的哪一侧.int direction(Point p1,Point p2,Point p3){ return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);}//判断与直线共线的点是否在线段上bool onSegment(Poi
2010-06-03 17:33:00 1354 1
原创 字符串唯一前缀问题;一道Trie树笔试题;
#include #include #include using namespace std;struct Trie{ int flag; struct Trie* next[26]; void init() { memset(next,0,sizeof(next)); flag=0; }}trie[10000];int k=1;struct Trie *root=&trie[0];void insert(string &s
2010-06-03 12:46:00 1203
原创 C语言也能做大事;MYSQL简单的数据库操作;
<br />#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "Resource.h"#include "MainDlg.h"/* 数据库头文件*/#include <sql.h>#include <sqlext.h>#include <sqltypes.h>/* 宏定义*/#define LOGIN_TIMEOUT 30#define MAXBU
2010-06-02 23:19:00 1355
原创 最小费用最大流;最小费用路算法;
#include #include using namespace std; //SPFA()使用#define MAX 100000 //const int numV=5; //SPFA记录是否已访问 bool inQueue[numV]; //路径前驱结点数组int preV[numV];//路径上最小残流int preF[numV];//顶点到源的最小耗费int cost[nu
2010-06-02 16:13:00 2640
原创 匈牙利算法;直接贴来的;理解交替轨的基础上,画图看一下算法流程,发现没有问题;
<br />#include <stdio.h> #include <string.h> #define MAX 102 long n,n1,match; long adjl[MAX][MAX]; long mat[MAX]; bool used[MAX]; FILE *fi,*fo; void readfile() { fi=fopen("flyer.in","r");
2010-06-01 22:25:00 708
原创 重大突破;留作纪念;图论,网络流Ford-Fukerson最大流算法;预流推进算法;
#include #include using namespace std;//BFS()用#define MAX 100000//包括源点(0),汇点(5),所有点在内,一共6个点,算法导论405页的图.const int numV=6; //广搜记录是否已访问bool visited[numV];//流网络struct{ int c; //容量 int f; //流}flowNet[numV][numV]; //广搜Info
2010-06-01 17:55:00 1614
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人