自定义博客皮肤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)
  • 收藏
  • 关注

原创 Bellman-Ford算法

在这个示例中, 数组用于存储每个顶点到源点的最短路径估计值, 数组存储图中的所有边。否则,算法输出每个顶点到源点的最短路径。Bellman-Ford算法是一种用于计算加权图中单源最短路径的算法。与Dijkstra算法相比,Bellman-Ford算法可以处理含有负权边的图,但不能处理含有负权回路的图。该算法的基本思想是通过松弛操作不断更新每个顶点到源点的最短路径估计值,直到不再发生更新为止。此外,由于Bellman-Ford算法的时间复杂度较高(O(V*E)),对于大型图可能不是最高效的选择。

2024-06-05 19:10:35 283

原创 C++并查集

在C++中,并查集通常通过一个数组来实现,其中每个元素的索引对应一个节点,而数组中的每个元素则存储其父节点的索引。在初始化时,每个元素的父节点都被设置为它自身,表示每个元素最初都属于一个单独的集合。之后,通过一系列的合并操作,不同的集合可以被合并。这意味着在从叶子节点到根节点的路径上,将所有节点的父节点直接设置为根节点,这样在下次进行查找时,就不需要再次遍历这些节点,从而减少了查找的时间复杂度。在这个示例中,我们创建了一个包含5个元素的并查集,并将元素0和1、2和3、4和2分别合并到了同一个集合中。

2024-05-11 15:27:33 237 2

原创 C++set

在C++中,是一种特殊的容器,它存储了唯一的元素,并且元素的值决定了其在容器中的位置。通常实现为一个平衡二叉树,如红黑树(Red-Black Tree),这种树的统计性能要好于一般的平衡二叉树,因此被广泛应用于关联容器的内部结构。在这个示例中,我们创建了一个容器,插入了三个整数,然后删除了第一个元素,并通过方法查找了第二个元素。最后,我们遍历了整个,并打印出了所有元素。请注意,中的元素默认按照字典顺序排序,并且一旦元素入到中,它们的值就不能被修改,因为保证了元素的唯一性和排序。

2024-05-11 15:20:46 565 2

原创 Floyd(弗洛伊德)算法

Floyd算法(Floyd-Warshall算法)是一种用于解决图中最短路径问题的算法,它可以处理有向图或无向图、有权图或无权图。该算法的时间复杂度为O(n^3),其中n是图中的顶点数量。Floyd算法适用于任何图,包括有负权边的图。Floyd算法的基本思想是通过多次更新操作来逐步找到任意两点之间的最短路径。算法开始时,将所有顶点之间的距离初始化为无穷大,或者如果存在边则设置为边的权重。这段代码首先定义了图的节点数量和距离矩阵,然后通过Floyd算法计算出任意两点之间的最短路径,并将结果打印出来。

2024-05-10 20:44:13 187

原创 Dijkstra(迪杰斯特拉)算法

算法开始时,将所有顶点的 值初始化为无穷大,然后将起始点的 值设置为0,并标记为已访问。接下来,算法会迭代地选取距离起始点最近且未被访问过的顶点,更新其到所有未被访问过的顶点的距离,并标记为已访问。这个过程会持续进行,直到所有顶点都被访问过,此时算法结束。在使用Dijkstra算法时,需要注意的是它不适用于包含负权边的图,因为这可能会导致算法无法找到正确的最短路径。该算法的基本思想是从一个起始点开始,逐步扩大搜索范围,每次遍历到距离起始点最近且未访问过的顶点的邻接节点,直到扩展到所有顶点为止。

2024-05-10 20:40:45 298

原创 C++欧拉筛

然后,通过循环从2开始遍历每个数,如果该数是素数,则将其加入素数列表,并更新数组,将所有该数的倍数标记为非素数。最后,打印出所有的素数。与传统的埃拉托斯特尼筛法(Eratosthenes Sieve)相比,欧拉筛能更快地筛选出一定范围内的素数,因为它避免了不必要的筛选操作,提高了效率。欧拉筛的核心思想是保证在2到n范围内,每个合数都能被唯一地分解为其最小质因数与除自己外最大的因数相乘的形式。在使用欧拉筛时,需要注意避免对素数列表进行不必要的操作,如重复添加相同的素数,或者在不需要的地方修改数组。

2024-05-10 20:27:54 371

原创 C++堆排序

堆排序是一种利用堆这种数据结构进行排序的算法。堆是一种特殊的数据结构,它是一个完全二叉树,并且满足特定的性质:对于每个节点 i,其父节点的值始终大于或等于子节点的值(最大堆),或者父节点的值始终小于或等于子节点的值(最小堆)。:重复上述过程,每次将堆顶元素与当前堆的最后一个元素交换,并调整堆,直到所有元素都被取出,最终得到有序序列。:将堆顶元素(最大元素或最小元素)与堆的最后一个元素交换,然后对剩余的元素重新调整为堆,使其满足堆的性质。:将待排序的元素构建成一个堆(通常是最大堆),即满足堆的性质。

2024-05-10 20:17:48 165

原创 C++逆序对

逆序对是指在一个序列中,如果存在一对元素,其中第一个元素比第二个元素小,那么我们就称这对元素构成了一个逆序对。例如,在一个升序排列的数组中,任何一对相邻元素,其中较大的那个元素在前,较小的那个元素在后,就构成了一个逆序对。在C++中,计算逆序对通常使用的是归并排序算法。归并排序的基本思想是将数组分为两部分,然后对这两部分分别进行归并排序,同时统计逆序对的个数。这个过程可以递归地进行,直到数组的大小变为1,此时逆序对的个数为0。最后,调用函数计算逆序对的个数,并将结果输出。

2024-05-10 20:12:33 227

原创 东方博宜 2250 登山 题解

问题描述五一到了,PKU-ICPC队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?输入第一行:N (2

2024-05-10 14:43:21 196

原创 C++ map

map的键和值可以是不同的类型,键是唯一的,每个键都对应一个值。multimap与map类似,只是允许一个键对应多个值。map可被当做哈希表使用,它建立了从键(关键字)到值的映射。map是键和值的一一映射。multimap是一对多映射。使用map或multimap时需要引入头文件map的迭代器和set类似,支持双向访问,不支持随机访问,执行一次“++”和“--”操作的时间复杂度均为O(logn)。默认的元素顺序为升序也可以通过第3个模版参数设置为降序。

2024-05-09 17:59:55 372

原创 C++欧拉路

欧拉路径(Eulerian path)是图论中的一个重要概念,它指的是在一个图中,通过所有边恰好一次,从一个顶点出发,可以走过所有边且只经过每个顶点一次的路径。换句话说,欧拉路径是指在图中,每条边恰好经过一次,而每个顶点最多经过一次的路径。只有当图中所有顶点的度数都是偶数或者有且仅有两个顶点的度数为奇数时,欧勒路径才存在。此外,即使存在欧勒路径,也不一定总能找到它,这取决于具体的算法实现和图的结构。如果有且仅有两个顶点的度数为奇数,其余顶点的度数均为偶数,则称该图具有欧勒路径。欧勒路径的C++实现。

2024-05-09 15:18:37 235

原创 最小生成树

最小生成树(Minimum Spanning Tree,简称MST)是图论中的一个概念,指的是在一个加权无向图中,通过遍历图的所有顶点,选择总权值最小的边集,构成一棵包含所有顶点的树,这棵树被称为最小生成树。最小生成树的特点是树中不存在任何环,且树的总权值(即所有边的权值之和)最小。在实现最小生成树时,需要注意数据结构的选用以及算法的细节实现,以确保算法的正确性和效率。Prim算法的基本思想是从图的某个顶点开始,每次选择与已有生成树顶点相连的权值最小的边,将其加入到生成树中,直到所有顶点都被访问过。

2024-05-08 20:51:17 317 2

空空如也

空空如也

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

TA关注的人

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