算法学习
文章平均质量分 57
PZHU_CG_csdn
这个作者很懒,什么都没留下…
展开
-
动态规划求最长递增序列
设长度为N的数组为{a0,a1, a2, ...an-1),则假定以aj结尾的数组序列的最长递增子序列长度为L(j),则L(j)={ max(L(i))+1, i例如给定的数组为{5,6,7,1,2,8},则L(0)=1, L(1)=2, L(2)=3, L(3)=1, L(4)=2, L(5)=4。所以该数组最长递增子序列长度为4,序列为{5,6,7,8}。算法代码如下:以字符串序列为例原创 2017-11-20 13:01:34 · 369 阅读 · 0 评论 -
PAT1015
1015. Reversible Primes (20)题目:A reversible prime in any number system is a prime whose “reverse” in that number system is also a prime. For example in the decimal system 73 is a reversible prime becau原创 2018-02-02 23:42:08 · 217 阅读 · 0 评论 -
PAT1013
1013. Battle Over Cities (25)题目:It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We原创 2018-02-02 23:41:50 · 270 阅读 · 0 评论 -
PAT1004
1004. Counting Leaves (30)题目:A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.InputEach input file contains one test case. Each ca原创 2018-02-02 23:40:42 · 176 阅读 · 0 评论 -
最小生成树
最小生成树1.最小生成树的性质:最小生成树是树,因此其边数等于顶点数减1,且树内一定不会有环。对给定的图G(V,E),其最小生成树可以不唯一,但其边权和一定是唯一的。最小生成树是一个无向图,因此其根结点可以是这棵树上任意的一个结点。2.prim算法 prim算法和Dijkstra算法使用的思想几乎相同,只有在数组dis[]的含义上有所区别。其中,Dijkstra算法的数组dis[]含义为起原创 2018-01-18 20:22:32 · 536 阅读 · 0 评论 -
最短路径
最短路径1.Dijkstra算法主要解决单源最短路径问题: void Dijkstra(int s){ for(int i = 0;i < maxn;i++) dis[i] = INF; dis[s] = 0; for(int i = 0;i < n;i++){ int u = -1,min = I原创 2018-01-18 20:22:11 · 252 阅读 · 0 评论 -
并查集
并查集1.并查集的定义并查集是一种维护集合的数据结构,他的名字中”并”、”查”、”集”分别取自Union(合并)、Find(查找)、Set(集合),也就是说,并查集支持下面的两个操作:合并:合并两个集合。查找:判断两个集合是否在一个集合中。并查集的实现可以通过一个数组: int father[N]其中father[i]表示元素 i 的父亲结点,而父亲结点本身也是这个集合中的元素,例如原创 2018-01-18 20:21:30 · 134 阅读 · 0 评论 -
PAT1030
1030. Emergency (30)题目:A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to deci原创 2018-01-18 20:21:07 · 178 阅读 · 0 评论 -
PAT1003
1003. Emergency (25)题目:As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams原创 2018-01-18 20:20:21 · 176 阅读 · 0 评论 -
string
STL-String 如果要使用 string,需要添加 string 头文件,即 #include(注意 string.h 和 string 是不一样的头文件)。1.cin 和 cout 1. 字符串可以通过 cin 输入,当遇到空格时就停止输入。 2. 可以通过 cout 直接输出一个字符串。拓展:当需要读入带空格的字符串时可以用如下两种方式。 //1.使用 getline()原创 2018-01-25 21:26:41 · 167 阅读 · 0 评论 -
STL-Set
STL-Set1.insert set<int> s; s.insert(1); s.insert(5); s.insert(-5); s.insert(1);//重复元素不会被多次插入2.find 返回某个要查找元素的迭代器,如果元素不存在,则返回集合最后一个元素后面的一个位置,即end()。 set<int>::iterator it;原创 2018-01-25 21:26:11 · 217 阅读 · 0 评论 -
priority_queue
priority_queue priority_queue 优先队列,其底层是用堆来实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。 在优先队列中,没有 front() 函数与 back() 函数,而只能通过 top() 函数来访问队首元素(也可称为堆顶元素),也就是优先级最高的元素。一、基本数据类型的优先级设置此处指的基本数据类型就是 int 型,double 型,char原创 2018-01-25 21:25:18 · 21686 阅读 · 3 评论 -
二叉查找树(BST)
一、定义二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树; 从二叉查找树的定义中可以知道,二叉查找树实际上是一棵数据域有序的二叉树,即对树上的每个结点,都满足其左子树上的所有结点的数据域均小于或等于根结点的数据域,其右原创 2018-01-06 21:24:09 · 282 阅读 · 0 评论 -
重构二叉树
一、已知二叉树的先序序列和中序序列重建二叉树示意图:根据示意图可以得到如下代码: node* create(int preL,int preR,int inL,int inR){ if(preL > preR){ return NULL;//先序序列的长度小于等于0时,直接返回 } node* root = new no原创 2018-01-05 16:05:25 · 291 阅读 · 0 评论 -
链表
链表操作1. 存储结构: typedef struct node{ int data; node* next; }node,*Node;2. 在当前链表中位置 i 插入一个结点:图示: 步骤: 先找到第 i-1 位置结点 Pi-1插入:Px->next = Pi-1->next,Pi-1->next = Px示例代码: Node i原创 2018-01-03 20:36:17 · 195 阅读 · 0 评论 -
二叉平衡树
平衡二叉树(AVL 树)1.平衡二叉树的定义 平衡二叉树任然是一棵二叉查找树,所谓平衡是指,对 AVL 树的任意结点来说,其左子树与右子树的高度之差的绝对值不超过 1,其中左子树与右子树的高度之差称为该节点的平衡因子 由于需要对每个结点都得到平衡因子,因此需要在树的结构中加入一个变量 height 来记录以当前为根结点的子树的高度: struct node{ in原创 2018-01-11 15:39:06 · 251 阅读 · 0 评论 -
通过序列构建二叉树
重构二叉树一、已知二叉树的先序序列和中序序列重建二叉树示意图:根据示意图可以得到如下代码: node* create(int preL,int preR,int inL,int inR){ if(preL > preR){ return NULL;//先序序列的长度小于等于0时,直接返回 } node* root = n原创 2018-01-11 15:38:34 · 1937 阅读 · 0 评论 -
树的遍历
树的遍历1.树的静态写法 用数组下标代替所谓的地址,这需要事先开一个大小不低于结点上限个数的结点数组,因此结构体 node 的定义会类似于下面这样。 struct node{ typename data; //数据域 int child[maxn]; //指针域,存放所有子结点的下标 }Node[maxn]; //结点原创 2018-01-11 15:37:47 · 431 阅读 · 0 评论 -
PAT1009
1009. Product of Polynomials (25)题目:This time, you are supposed to find A*B where A and B are two polynomials.InputEach input file contains one test case. Each case occupies 2 lines, and each line cont原创 2018-02-02 23:41:07 · 170 阅读 · 0 评论