![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 77
jzh08
这个作者很懒,什么都没留下…
展开
-
并查集实现
<br /><br /> 首先根据我的理解来谈谈什么是并查集(Union—find set),又叫“不相交集”,它提供了union和find操作,分别用来合并两个集合,在集合中查找某个元素属于哪个集合。听说经典应用是kruskal算法的实现,目前还没有实现那个算法,到时候再看。<br />实现这个并查集的最大收获是重新认识了树的表示中除了使用链表表示以外,使用数组有时候也是一种很好的方法,<br />比如说堆排序中的树就是用数组表示的,而且用数组表示只需要在数组中记录每一个节点的父节点就可以了,其原创 2010-07-20 23:10:00 · 377 阅读 · 0 评论 -
最小堆的实现
<br /><br /><br /> <br />/**<br />这边实现的是最小堆,最小堆是这样定义的,首先堆是一棵完全二叉树,每一个节点都有一个权值,满足的条件是,父节点的权值总是大于等于子节点的权值<br />**/<br />#include <iostream><br />using namespace std;<br /><br /><br />//最小堆类的定义如下<br />template <class T><br />class MinHeap<br />{<br />private:原创 2010-07-28 15:46:00 · 1086 阅读 · 0 评论 -
Dijkstra算法的堆实现
<br /><br />/**<br />使用最小堆实现Dijkstra算法,图的表示是邻接表表示<br />这边只是求出每一个节点到源节点的最短路径,并没有记录父节点,用来生成最短路径<br />**/<br />#include <iostream><br />using namespace std;<br />#define MAX_NODES 1000 //定义最多的节点数<br />#define MAX_COST 10000 //定义边的最大的权值<原创 2010-07-30 16:59:00 · 1330 阅读 · 0 评论 -
Bellman-ford算法实现
<br /> Bellman-ford算法是求解连通带权图中单源最短路径的一种算法,它允许图中存在权值为负的边。同时它还能够判断出图中是否存在一个权值之和为负的回路。如果存在的话,图中就不存在最短路径(因为,假设存在最短路径的话,那么我们只要将这条最短路径沿着权值为负的环路在绕一圈,那么这条最短路径的权值就会减少了,所以不存在最短的路径,因为路径的最小值为负无穷),如果不存在的话,那么求出源节点到所有节点的最短路径。它的基本思想是,进行n-1迭代,分别计算出从源节点到每一个节点的最多有k条边的路径原创 2010-08-02 19:43:00 · 757 阅读 · 0 评论 -
Kruskal算法并查集和最小堆实现
<br />Kruskal算法的基本思想是,将图中的节点分类,分成两个集合,分别表示成S和T其中S是不在生成树中的节点集合,T是在生成树中的节点集合。刚开始的时候,T中只有源节点一个节点。同时将图中的所有边按照权值排序。然后每次向图中添加一条权值最小的边,同时满足,这条边的一个节点在S中一个节点在T中。这样循环,直到树中有了n-1条边为止。实现的代码如下:<br /> <br /> <br /> <br />/**<br />这边使用并查集实现Kruskal算法,并没有使用最小堆,代替的使用了一个排序的方法原创 2010-08-02 20:06:00 · 1669 阅读 · 0 评论