算法总结
da_fan_shu_
这个作者很懒,什么都没留下…
展开
-
1-n的全排列
#include#define n 4int x[n]={1,2,3,4};void swap(int &x,int &y){ int t=x; x=y; y=t;}void backtrack(int i){ if(i==n) { for(int j=0;j<n;j++) printf("%d ",x[j]); printf("\原创 2012-10-19 13:22:33 · 860 阅读 · 0 评论 -
欧拉回路
经典七桥问题:对无向图: 定义:给定无孤立结点图G,若存在一条路,经过图中每条边一次且仅仅一次,该条路称欧拉路,若存在一条回路,经过图中每边一次且仅仅一次,该回路称为欧拉回路。具有欧拉回路的图称为欧拉图。定理:无向图G具有一条欧拉路,当且仅当G是连通的,且有0个或者是两个奇数度得结点。推论:无向图G具有一条欧拉回路,当且仅当G是连通的,并且所有结点的度数均为偶数。转载 2012-11-20 21:00:43 · 477 阅读 · 0 评论 -
拓扑排序
一、概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。注意: ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均是从转载 2012-11-20 16:15:34 · 293 阅读 · 0 评论 -
最大堆排序
最大堆特性是指除了根以外的每个结点i,有A[PARENT(i)] >= A[i]。 至于堆排序的具体应用,在后面的最短路算法—Dijkstra中,会用到由堆来优化普通的Dijkstra算法。 堆排序相对简单,不做过多解释/** *Author@da_fan_shu_ *Time@23/9/2012 *Goal@最大堆排序 **//*在堆排序算法中,使用的是最大堆,原创 2012-09-23 09:38:38 · 277 阅读 · 0 评论 -
正整数高精度运算
加、减、乘、除#include#include//using namespace std;int Big(char* str1,char* str2);char* ClearFrontZero(char* str);void ToSameDigits(char* str1,char* str2);char* Plus(char* str1,char* s原创 2012-11-15 08:56:05 · 489 阅读 · 0 评论 -
二分图匹配算法
匈牙利算法#include #include int n1,n2,m,ans; int result[101]; //记录V2中的点匹配的点的编号 bool state [101]; //记录V2中的每个点是否被搜索过 bool data[101][101];//邻接矩阵 true代表有边相连 void init() { int t1,t2;原创 2012-10-21 17:20:24 · 344 阅读 · 0 评论 -
筛法求素数
#include #include #includeusing namespace std; const int MAXV = 100; //素数表范围 bool flag[MAXV+1]; //标志一个数是否为素数 int prime[MAXV+1]; //素数表,下标从0开始 int size=0; //素数个数 void genPrime(int原创 2012-10-21 22:32:31 · 420 阅读 · 0 评论 -
最小优先队列--堆实现
#includeusing namespace std;int INF = 10000;//交换变量的值void swap(int* a,int* b){ int temp = *a; *a = *b; *b = temp;}//建立以i为根的最小堆void Min_Heapify(int* A,int i,int heapsize){原创 2012-09-24 23:13:34 · 321 阅读 · 0 评论 -
ELFHash函数
// ELF Hash Functionunsigned int ELFHash(char *str){ unsigned int hash = 0; unsigned int x = 0; while (*str) { hash = (hash << 4) + (*str++);//hash左移4位,把当前字符ASCII存入hash低四位。 if ((x原创 2012-09-25 23:57:50 · 281 阅读 · 0 评论 -
Floyd-Warshall算法
#include #include using namespace std;typedef struct{ int vexs[10]; int edges[10][10]; int n; int e;}MGraph;#define INFINITE 2048void CreateGraphM(MGraph *G){ int原创 2012-10-09 21:31:58 · 275 阅读 · 0 评论 -
Dijstra算法
/*Dijkstra求单源最短路径 2012.10.9*/ #include #include#define M 100#define N 100using namespace std;typedef struct node{ int matrix[N][M]; //邻接矩阵 int n; //顶点原创 2012-10-09 21:28:29 · 312 阅读 · 0 评论 -
求集合中的所有子集
1.先从数组中A取出一个元素,然后再从余下的元素B中取出一个元素,然后又在余下的元素C中取出一个元素2.按照数组索引从小到大依次取,避免重复//arr为原始数组 //start为遍历起始位置 //result保存结果,为一维数组 //count为result数组的索引值,起辅助作用 //NUM为要选取的元素个数 //arr_len为原始数组的长度,为定值 void co原创 2012-10-18 23:39:59 · 822 阅读 · 0 评论