自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

72 73 76 89 82 84 89 81

我们都有梦想,凭什么不努力

  • 博客(25)
  • 资源 (2)
  • 问答 (10)
  • 收藏
  • 关注

原创 最大二分图匹配 邻接表优化

我们利用邻接表虽然牺牲了部分的空间,但是我们换取了,在二分图查找出边的操作,可以降低算法的复杂度下面我们在代码中进行解析#include"iostream"#include"cstdio"using namespace std;int u[100];int v[100];int w[100];int first[100];int next[100

2016-03-22 08:40:02 432

原创 二分图的最大匹配

二分图的最大匹配算法的核心在于扩展增广路,每次只有两个选择,如果当前查找的点没有匹配,那么直接匹配成功否则我们再来看是否我们可以对这个已经匹配的点的已匹配的点的其他出边在进行匹配,使得我们当前这个新的点可以成为被匹配的点,那么我们很容易就可以得到一条新的增广路(匹配的边),那么匹配的边数就加一,直到所有的边我们都已经扫描完毕,此时得到的已匹配的边数就是二分图的最大匹配数其他细节我们在下

2016-03-21 23:32:12 339

原创 寻找图的最少割边的算法

寻找图的最少割边的算法

2016-03-21 16:30:56 317

原创 图的割边(有缺陷的算法)

本算法只能求割一次的情况,如果要求最少的割边次数,本算法毫无用武之地下面是代码段#include"iostream"#include"cstdio"using namespace std;int u[100];int v[100];int w[100];int first[100];int next[100];int n,m;int x,

2016-03-21 16:28:19 347

原创 图的割点 邻接表和邻接矩阵的分析

求图的割点的方法我们就不细说了,详情可以百度,这里主要分析一下为什么要用邻接表而不用邻接矩阵来进行求割点首先我们先来看这两种代码1.邻接表#include"iostream"#include"cstdio"#define inf 99999999using namespace std;int map[100][100];int num[100];int

2016-03-20 12:42:54 776

原创 最小生成树Prim算法 堆优化

对于最小生成树prim算法中,我们每次要扫描一遍邻接表才能找到最小的边的点,但是如果利用堆这种数据结构来进行优化,我们可以大大减小这种查找的时间消耗我们利用邻接表和小根堆来进行优化,下面是代码解析#include"iostream"#include"cstdio"using namespace std;int h[100];int u[100];int

2016-03-19 14:02:14 3281

原创 DFS BFS 路径记录的总结

最近还是学了一些东西的关于搜索本身没有什么难以理解的东西,但是这个路径晦朔真的是让我头疼了一整天,感谢峰神提点现在总结如下DFS路径记录首先,DFS一般是用递归实现的,在每次递归前我们在结构体数组中记录一下当前的坐标,然后再进行递归,在找到目标的时候,恰好我们找到了一组坐标点,进而实现了路径的记录以下是简单的代码解析#include"iostream"#incl

2016-03-16 22:42:40 4859 1

原创 BFS如何记录路径

DFS的路径是递归可以记录的,但是BFS的路径如何记录

2016-03-16 18:31:00 2674

原创 HDU 1312 DFS

深搜水题 没什么好说的了 强调一下就好,回溯的时候记录不要删除就行下面附上AC代码#include"iostream"#include"cstdio"#include"cstring"using namespace std;char map[50][50];int n,m;int book[50][50];int num=1;int bx,by;

2016-03-16 16:59:50 211

原创 HDU 1242 小心搜索的小陷阱

题目中有一个很坑人的陷阱#friends#所以说要是从起点开始进行搜索那么起点是很多个的所以我们可以从终点来开始进行搜索,这是整个题的核心其他的没什么可说的了,简而言之,就是BFS的水题下面附上AC代码#include"iostream"#include"cstdio"#include"cstdlib"#include"cstring"using names

2016-03-16 16:37:52 337

原创 HDU 1010 比较坑人的一道搜索题

本人当初只是想到用搜索做,上手就是BFS结果WA了,后来反应过来只能用DFS来做提交了21次,全TLE,后来在多次努力下找到了大量的陷阱,为还在为此题困扰的人指指路1.奇偶剪枝很简单的一个概念设起点坐标是bx,by;终点坐标是ex,ey;最短路径是abs(bx-ex)+abs(by-ey)但是我们可以很显然的看出来,无论是走,我们的步数肯定比最短路径数多一个偶数所以,简

2016-03-16 15:43:14 4034 4

原创 树的应用 森林 并查集

并查集属于不相交的数据结构,可以用一个根节点代表整棵树来进行判断,并查集的核心简化步骤有一个就是在构建树的时候应用了路径压缩以便之后查找的时候速度更加快捷以下贴出例题源码,并在源码中讲解并查集的四个模板函数#include"iostream"#include"cstdio"using namespace std;int fa[100];      //记录编

2016-03-13 23:44:49 661

原创 堆排序 两种实现(最小堆和最大堆)

堆排序算法是建立在二叉树的堆结构上的,通过交换堆(一维数组)中的元素,并进行上浮或下沉函数运算实现多次调整堆排序算法的复杂度低,和快速排序属于相同速度级别的一种快速的排序算法下面以最小堆和最大堆来进行堆排序算法的实现,具体内容在代码中进行讲解1.最小堆 堆排序#include"iostream"#include"cstdio"using namespace

2016-03-12 23:31:35 3052

原创 二叉树存储 最小堆

最小堆相当于是一个优先队列因为父亲和左右孩子的编号之间有奇妙的关系,我们可以利用一维数组进行数据的存储下面附上最小堆的siftdown和siftup函数以及利用这函数进行最小堆的生成#include"iostream"#include"cstdio"using namespace std;int h[100];                   //存储数

2016-03-12 00:14:44 767

原创 Bellman-ford队列优化算法 SPFA算法

Bellman-ford队列优化算法的核心在于:继承了bellman-ford算法的核心内容(邻接表处理)    利用队列优化,减少了不必要的判断下面在代码中进行详解#include"iostream"#include"cstdio"#define inf 9999999using namespace std;int u[100];        

2016-03-11 16:23:57 341

原创 Dijstra算法 单源最短路径算法

用dis数组记录起点到其余所有点的最短路径#include"iostream"#include"cstdio"#define inf 99999999using namespace std;int map[100][100];int dis[100];int book[100];                  //book数组记录那些点已经被利用过进

2016-03-08 23:30:07 411

原创 Floyd算法 全局最短路径

最简单但是最容易超时的最短路径算法目的是找到任意两点的最短路径用map二维数组对每个点的情况不断进行边的松弛#include"iostream"#include"cstdio"#define inf 99999999using namespace std;int map[100][100];int n,m;int t1,t2,t3;i

2016-03-08 23:07:29 617

原创 数组链表的简单实现

链表的线性数组实现#include"iostream"#include"cstdio"using namespace std;int u[100];                //第i条边的起始点int v[100];                //第i条边的终止点int w[100];              //第i条边的权值int n;

2016-03-08 22:52:04 408

原创 Prim算法

Prim算法的核心在于通过book数组记录已经在生成树上的节点,并不断寻找树外最小边加入到生成树中(贪心的策略)在每次更新生成树后,还必须用更新dis数组dis数组的含义必须要明确,dis函数代表的是生成树上的所有节点到树外的各节点的权值的最小值,而不是单单树内的一个节点以下是代码的实现#include"iostream"#include"cstdio"#d

2016-03-06 10:45:40 690

原创 Krustral 算法

简而言之,克鲁斯卡尔算法的核心又三个1.并查集对目标的合并和查询2.将边按权排序3.将排序的边从小到大找未被合并到生成树中并对值进行累加举例(以下程序的快速排序算法个人手打,也可以借用algorithm的sort库函数进行实现)#include"iostream"#include"cstdio"#include"cstdlib"using nam

2016-03-06 10:32:26 1176

原创 BFS广度优先搜索

广度优先搜索,利用队列实现,结束标志是队列为空的时候承接DFS的算法实现的讲例,对于迷宫问题我们也可以采取广度优先搜索实现#include"iostream"#include"cstdio"#include"cstdlib"using namespace std;int map[55][55];int book[55][55];int startx,star

2016-03-04 22:51:48 282

原创 DFS深度优先搜索

搜索算法的核心个人学习过程中总结有两个(求不喷):1.有序的扩展2.有效利用记录数组进行标记经典案例:迷宫问题(0可走,1不可走,找最短路径)#include"iostream"#include"cstdio"#define inf 9999999         //对mink进行初始化,便于进行最小的比较using namespace std;

2016-03-04 22:51:06 396

原创 快速排序算法

快速排序是经典的二分思想的应用#include"iostream"#include"cstdio"using namespace std;int a[101];int n;void quicksort(int left,int right){int i,j,t,temp;if(left>right){return ;}el

2016-03-02 00:01:02 370

原创 分治法--最大子数组

算法导论分治算法分治法:将数组尽可能分成规模相等的两部分,所以最大子数组无外乎三种情况1.全在左数组a[low->mid]中2.全在右数组a[mid+1->high]中3.在左右中a[mid-i->mid+j]中所以我们将问题进行细化,接下来的内容在代码中进行讲解下面这道题的答案是43#include"iostream"#include"cstdio"#defi

2016-03-01 16:44:19 1090 1

原创 最大子数组求法--动态规划

最大子数组的动态规划求法和分治思想的(递归)的优劣分析与实现

2016-03-01 16:23:10 476

Code from Python - 详细读书笔记

本人复习资料以及读书笔记,欢迎批评指针,转载请注明出处

2017-02-10

从零开始学SBT

本论文从多个方面详细的阐述了如何从BST一步一步的了解并写出SBT的数据结构框架,非常的浅显易懂,文后附上了全部的封装代码以及复杂度和数据结构的理论正确性的证明

2016-08-18

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

TA关注的人

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