自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 KMP算法学习

KMP算法KMP算法讲解#include<cstdio>#include<cstring>int next[100];void getnext(char *ptr){//构造子串的next表 int i=0,k=-1; next[0]=-1; int n = strlen(ptr); while(i<n){ if(k<0 || ptr[i] == ptr[k]){//匹配 i++; k++; next[i]=k; }else

2021-08-05 11:06:11 84

原创 Prim算法学习

Prim算法Prim算法的本质也是一个贪心的策略,每次贪心的取局部最优解更新数据,直至全局最优Prim算法讲解#include<cstdio>#include<cstring>#include<cmath>#include<iostream>using namespace std;int mapp[10005][10005];int dis[100005];int flag[100005];int main() { memset(fla

2021-08-05 08:42:29 86

原创 Dijkstra算法

Dijkstra算法Dijkstra算法讲解代码对照Dijkstra算法的本质是一个贪心策略,每一次贪心的选择当前最优,局部最优就等同于全局最优#include<cstdio>#include<cstring>#include<cmath>#include<iostream>using namespace std;int mapp[10][10];int dis[10];int falg[10];int main() { memset

2021-08-04 16:49:31 193

原创 图的遍历:DFS学习

DFS始自顶点s的深度优先搜索首先访问顶点s若s尚有未被访问的邻居,则任取其一u递归执行DFS(u)否则返回我的理解其实DFS就是图的扩散式遍历,BFS则是图的层次式遍历以AOJ869为例对DFS算法进行简单的描述#include<cstdio>#include<cstring>using namespace std;int N;int cnt=0;char mp[35][35];bool vis[35][35];int C[4][2] = {{1,0},

2021-08-04 09:59:23 101

原创 图的遍历:BFS算法学习

BFS图的遍历过程,其实可以抽象为一颗树的层次遍历过程,通过一个根结点,向外一层一层的遍历,直至抵达目的终点或者遍历完整颗子树。下面通过POJ3984题对BFS算法流程进行简单描述POJ3984#include<cstdio>#include<queue>#include<cstring>using namespace std;int mp[10][10];int vis[10][10];const int dir[4][2] = {{1,0},{0

2021-08-04 08:48:11 263

原创 二叉树:树的遍历

树的遍历先序遍历先序遍历的顺序是: 根|左|右下面给出递归实现过程void Preorder(TreeNode *x){//先序遍历 递归实现 if(!x){ //如果结点x为空,则抵达递归终点 return; } printf("%d",x->Data); //先访问根 Preorder(x->Left); //再访问左结点 Preorder(x->Right); //最后访问右结点} //时间复杂度O(n)当然对于一颗树的先序遍历,我们也可以

2021-08-03 14:54:37 59

原创 栈的应用实例

栈应用逆序输出:进制转换//LIFO #include <cstdio>#include <cstdlib>const char dight[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};struct stack{ char data; stack* next;}; typedef struct stack stack;stack* build(){ stack*

2021-08-02 21:14:37 204

原创 选择排序算法

选择排序#include<cstdio>#include<algorithm>using namespace std;void selectsort(int *a,int len){ int max,k; for(int i=0;i<len;i++){ max=0; for(int j=0;j<len-i;j++){ if(max<a[j]){ max=a[j]; k=j; } } swap(a[k],a[

2021-08-02 20:40:51 37

原创 LCS最长公共子序列

LCS最长公共子序列LCS:递归对于序列A[0,n]和B[0,m],LCS(A,B)无非三种情况若n = -1或m = -1,则公共子序列为空串,长度也为0若A[n] = ‘x’ = B[m],则取作LCS(A[0,n),B[0,m)) + ‘x’(减而治之)A[n] != B[m],则在LCS(A[0,n],B[0,m))与LCS(A[0,n),B[0,m])中取更长者(分而治之)这里有两种情况,一种是Y对整个匹配没有贡献,我们把Y从匹配过程中剔除,对剩下的序列进行递归的求解

2021-08-02 17:19:02 51

原创 归并排序算法

归并排序递归排序的算法实现流程可以分为以下几步序列一分为二子序列递归排序合并有序子序列以上图为例,当我们得到一个无序列表时,首先我们对整个列表进行二分递归,当递归至终点时,每一个单一元素就是一个有序列表,我们将两个有序列表合并就得到了一个更大的有序列表,更大的有序列表再合并,以此类推最终会合成一个完整的有序列表。void merge(int *a,int lo,int mi,int hi){ int l=lo; int r=mi; int b[hi-lo]; for(int i=

2021-08-02 14:46:03 44

原创 冒泡排序算法

冒泡排序冒泡基础版冒泡排序改进版冒泡排序再改进冒泡基础版自左向右逐一检查元素,如果发现逆序对就将其交换,使得每次扫描都会将最大或最小的元素就位void mpsort_L(int *a,int n){ for(int i=0;i<n;i++){ for(int j=1;j<n-i;j++){ if(a[j-1]>a[j]){ swap(a[i-1],a[i]); } } }} 冒泡排序改进版如果在一次扫描中没有出现逆序对说明整个数列已经有序,可

2021-08-02 14:04:44 54

原创 二分查找算法

二分查找二分查找基础版二分查找改进版本A二分查找改进版本B二分查找基础版减而治之以任一元素x = S[mi]为界,都可将待查找区间分为三部分S[lo,mi) <= S[mi] <= S(mi,hi]只需将目标元素e与x做一比较,即可分为三种情况进一步处理:e<x:则e若存在必属于左侧子区间S[lo,mi),故可向左侧深入e>x:则e若存在必属于右侧子区间S(mi,hi],故可向右侧深入e=x:已在此处找到答案,可随即返回int Binsearch(int *a,

2021-08-02 11:18:30 71

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除