- 博客(14)
- 收藏
- 关注
原创 最小生成树和最短路径
Kruskal 算法基于贪心策略,其核心思想是先将图中所有边按照权值从小到大进行排序,然后依次选取权值最小的边,如果这条边加入到当前的生成树中不会形成环,就将其加入;重复这个过程,直到生成树包含图中的所有顶点。Dijkstra 算法用于求解单源最短路径问题,即从一个给定的源顶点到图中其他所有顶点的最短路径。该算法基于贪心策略,每次从未确定最短路径的顶点中选择距离源顶点最近的顶点,然后以该顶点为中间点,更新其他顶点到源顶点的距离,直到所有顶点的最短路径都被确定。Dijkstra 算法。
2025-02-21 22:14:59
746
原创 DFS,BFS的复盘
对于 100%100% 的数据,1≤N,M≤51≤N,M≤5,1≤T≤101≤T≤10,1≤SX,FX≤n1≤SX,FX≤n,1≤SY,FY≤m1≤SY,FY≤m。第一行为三个用空格隔开的正整数,表示 N,A,BN,A,B(1≤N≤2001≤N≤200,1≤A,B≤N1≤A,B≤N)。对于 100%100% 的数据,1≤N≤2001≤N≤200,1≤A,B≤N1≤A,B≤N,0≤Ki≤N0≤Ki≤N。对于全部的测试点,保证 1≤x≤n≤4001≤x≤n≤400,1≤y≤m≤4001≤y≤m≤400。
2025-02-19 22:17:46
615
原创 渔翁_愚翁题解
分析:本来是打算使用二维数组来进行每条边是否出现,先初始化每个格子的初始值为1,假如一条边为x,y,如果a[x][y]的值为1,则将啊a[x][y],a[y][x]的值设为2, 否则删除数加一,但是这样时间会超限,我们构结一个结构体来储存连接的两个点,并使小的那个点在前面,然后对这些结构体排序,然后确定自环和重复的边。你需要确定是否存在一个整数 nn 使得 S(n)=xS(n)=x,S(n+1)=yS(n+1)=y。因此,答案是 No。
2025-02-18 22:25:29
545
原创 十大排序的基础知识
*时间复杂度**:- 最佳情况:O(n + k)- 最坏情况:O(n²)- 平均情况:O(n + k)**空间复杂度**:O(n + k)**稳定性**:稳定// 插入排序函数,用于对桶内元素进行排序i < n;i++) {j--;// 桶排序函数// arr 是待排序的数组,n 是数组的长度// 找到数组中的最大值和最小值i < n;i++) {// 计算桶的数量// 创建桶数组i++) {// 记录桶内元素的数量// 将元素分配到各个桶中。
2025-02-16 22:24:20
538
原创 单调栈的练习
第三次:b={3}(因为队列单调递增,-1最小,所以挤掉1和3,找最小值的时候也不会轮到它们);的第 jj 头牛,如果 hi>hi+1,hi>hi+2,⋯ ,hi>hjhi>hi+1,hi>hi+2,⋯,hi>hj,那么认为第 ii 头牛可以看到第 i+1i+1 到第 jj 头牛。对于全部的测试点,保证 1≤1≤ 每个人的高度 <231<231,1≤n≤5×1051≤n≤5×105。接下来 NN 行,每行一个整数 aiai,分别代表第 1,2,⋯ ,N1,2,⋯,N 头牛的身高。
2025-02-14 20:51:34
616
原创 链接矩阵法
链接矩阵(Link Matrix)也称为邻接矩阵(Adjacency Matrix),是表示图(graph)中顶点之间连接关系的矩阵。在一个图中,顶点代表各种实体,比如网页、社交网络中的用户、电路中的节点等,而边代表这些实体之间的关系,比如网页之间的超链接、用户之间的好友关系、电路中节点之间的电气连接等。链接矩阵就是用矩阵的形式来直观地描述这些顶点之间是否存在边的连接关系。设图\(G=(V,E)\),其中\(V=\{v_1,v_2,\cdots,v_n\}\)是顶点集合,\(E\)是边的集合。链接矩阵\(A
2025-02-09 21:54:37
397
原创 最短路径的两种方法
Floyd-Warshall 算法是一种用于求解图中所有顶点对之间最短路径的经典算法,由 Robert W. Floyd、Stephen Warshall 等人共同提出。
2025-02-06 21:53:38
264
原创 链表的相关扩展
对于插入和删除操作,平均时间复杂度为 ,但在头部或尾部操作时,如果已知头节点或尾节点,可以达到。对于插入和删除操作,平均时间复杂度为 ,但在头部或尾部操作时,可达到。函数中,我们可以看到对双链表进行了一系列操作,包括在头部、尾部和指定位置插入节点,以及在头部、尾部和指定位置删除节点,同时还调用。函数中,我们对循环链表进行了插入(头部和尾部)、删除(头部和尾部)操作,以及打印和释放链表内存的操作。函数中,我们对静态链表进行了一系列操作,包括在头部和尾部插入节点,以及在头部和尾部删除节点,还调用。
2025-01-22 21:24:18
783
原创 队列的相关知识
这个链式队列的实现使用链表来存储队列元素,避免了顺序存储队列的固定大小限制,更具灵活性。它通过动态分配内存来存储新元素,当元素入队时添加到链表的尾部,出队时从链表的头部移除元素,通过指针的操作来维护队列的状态。队列的空间复杂度取决于存储元素的数量,为 ,因为需要为每个元素分配一个节点。的设置足够大以满足存储需求,同时要注意入队和出队操作可能会导致的队列满和队列空的情况,避免出现异常行为。避免了数组越界问题,使得队列在逻辑上是循环的,能够更高效地利用数组空间。请注意,在使用此代码时,需要确保。
2025-01-20 21:34:35
629
原创 c++基础函数的使用
最常用的函数有cout,cin,endl。对于学习过c语言的同学可以将"cout"理解为“printf”,"cin"理解为“scanf”,"endl"理解为“\n”。为了方便可以使用“using namespace std” 相当于对"std::endl,std::cout,std::cin"这三个进行了定义。在c++中最常用的头文件为iostream;
2025-01-18 21:55:47
233
原创 二分查找和二分答案
二分答案(Binary Search),又称折半查找,是一种高效的用于在有序数组中查找特定元素的算法策略,也常用于解决最优解问题。它的核心思想是通过不断将搜索区间缩小一半,快速定位目标值。二分查找(Binary Search)是一种在有序数组中进行查找的算法。它的基本思想是将数组分成两部分,通过比较目标元素与中间元素的大小,不断缩小搜索区间,直到找到目标元素或者确定目标元素不存在。
2025-01-17 21:51:03
889
原创 c语言与c++的区别
在C++中,函数原型必不可少,但是在C中是可选的。这一区别在声明一个函数时让函数名后面的圆括号为空,就可以看出来。在C中,空圆括号说明这是前置原型,但是在C++中则说明该函数没有参数。也就是说,在C++中,intslice();和int slice(void);相同。在C中,编译器假定用户使用旧风格声明函数。在C++中,编译器假定slice()与slice(void)相同,且未声明slice(int,int)函数。另外,C++允许用户声明多个同名函数,只要它们的参数列表不同即可。
2025-01-11 21:59:35
391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人