- 博客(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
原创 图的割边(有缺陷的算法)
本算法只能求割一次的情况,如果要求最少的割边次数,本算法毫无用武之地下面是代码段#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
原创 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
从零开始学SBT
2016-08-18
关于python迭代器的问题
2017-02-10
关于python迭代器的问题
2017-02-10
关于floyed算法实现的问题
2016-11-26
关于RSA的一些问题,急求解答
2016-11-06
关于POJ 2503 ELFhash WA的问题
2016-10-30
求解5050问题的解法为什么递归返回不去了
2016-08-25
关于java swing的一点问题
2016-07-11
关于c++文件读写的一个问题
2016-06-03
C++的成员函数友元的问题
2016-05-31
链表和指针的疑惑问题
2016-05-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人