- 博客(17)
- 收藏
- 关注
原创 数据结构——链式前向星
是一种用于存储图结构(尤其是有向图)的高效数据结构,常用于图的遍历(如 DFS、BFS)、最短路径算法(如 Dijkstra、Bellman-Ford)、最小生成树算法等场景。的方式存储图的边信息,相比传统邻接表,具有代码实现简洁、空间利用率高、遍历效率稳定等优点。
2025-05-16 15:54:54
332
原创 数据结构——双向循环链表模板
访问后一个节点,且首尾节点相连形成环形结构。这种设计使得链表在遍历、插入、删除等操作上更灵活高效。特性的数据结构,每个节点既可以通过前驱指针()访问前一个节点,也可以通过后继指针(注:尾插与任意插都是差不多的。双向循环链表是一种结合了。
2025-05-15 22:09:22
316
原创 SPFA求单源最短路高效算法(Bellman-Ford优化版),判断图中是否存在负权圈
【代码】SPFA求单源最短路高效算法(Bellman-Ford优化版),判断图中是否存在负权圈。
2025-05-14 00:07:19
205
原创 求多源最短路——Floyd-warshall算法
对所有顶点进行Dijkstra求单源最短路定义dist[k][i][j]表示为最短路径经过[0,k-1]的顶点能够从i到j的最短路径有点像01背包,对于第k个顶点,可以选或不选不选:dist[k][i][j]=dist[k-1][i][j]选: dist[k][i][j]=dist[k-1][i][k]+dist[k-1][k][j];根据01背包的特点,可以将第一维直接去掉所以最终
2025-05-12 09:33:45
173
原创 Dijkstra朴素算法求最短路径
总得来说就是,从源点开始找,找源点所有当前未确定顶点中距离估计值最小的顶点(并且该顶点没有被确定最短路径)(一开始肯定找源点自己,更新源点的出边),找到之后,标记这个顶点u,通过这个顶点u更新其他顶点到源点的距离,以此类推,每次都找dist[i]最小的那个顶点。单源最短路、非负边权、连通图,顶点数最好小于5000。
2025-05-11 23:36:27
138
原创 并查集路径压缩
单次查找时,通过路径压缩,树的高度会显著降低,时间复杂度为常数很小的O(1)先通过Find函数找到s1,s2的父节点,再将s1的父节点指向s2。多次查找时,时间复杂度接近O(n)键代表元素本身,值代表元素的。通过递归找到元素的根节点。
2025-05-10 13:12:41
264
原创 并查集启发式合并(按秩合并未经过路径压缩),时间复杂度为O(logn)
1.如果在未经过路径压缩的情况下,秩会始终等于树的高度(必须每个元素一开始的秩初始化为1),举个例子,A,B,C,D四个节点,A,B孤立,C与D相连,当A与B合并时,孤立元素合并秩+1,此时秩为2,再将CD的根节点指向AB的根节点,因为任意两颗树合并,都是根节点与根节点相连。根据Union函数可以看出,每当秩增加时,元素个数都要翻倍,经过 k 次合并后,元素数量至少为 2^k。先通过Find函数找到s1,s2的父节点,将秩更大的根节点最为秩更小的根节点的父节点。m_far[x]代表x的父节点。
2025-05-10 01:18:50
224
原创 并查集森林算法,时间复杂度为O(n*m),n代表元素个数,m代表操作上次数(合并或查找)
先通过Find函数找到s1,s2的父节点,再将s1的父节点指向s2。对于一个元素的父节点,一直往上找,直到找到根节点。对于每个元素,初始化它们的集合为本身。键代表元素本身,值代表元素的父节点。
2025-05-09 23:34:07
183
原创 并查集朴素版本,时间复杂度为O(n*m),n为元素个数,m为操作数
想要合并元素id1和元素id2的集合,只需要先通过Find函数找出各自的集合,通过枚举哈希表,找出所有集合为s2的元素,将这些元素放入集合s1中,至此,s1和s2合并完成。因为底层数据结构采用的是哈希表,所以在查找时间复杂度为O(1)键代表这个元素本身,值代表元素的集合。对于每个元素,初始化它们的集合为本身。
2025-05-09 22:52:52
171
原创 最小生成树Prim朴素算法剖析
2. 对于最小生成树集合中找一个顶点,这个顶点与未在集合中的顶点的边权最小。最小生成树(MST)问题是指在一个无向连通图中,找出其所有顶点的集合,最小生成树问题的关键是如何选择边,使得所选边的权值之和最小。Prim算法是一种贪心算法,它每次选择一条权值最小的边,并将其加入到最小生成树中,直到所有顶点都属于最小生成树。使得这些顶点之间都连通,且所选边的权值之和最小。3. 重复步骤2,直到所有顶点都属于最小生成树。1. 选择一个顶点,并将其加入到最小生成树中;Prim算法 最小生成树。
2025-05-09 15:26:20
296
原创 BFS简单迷宫问题
爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在 x1,y1 处,车站在 x2,y2 处。现在给出一个 n×n(n≤1000) 的地图,0 表示马路,1 表示店铺(不能从店铺穿过),爱与愁大神只能垂直或水平着在马路上行进。爱与愁大神为了节省时间,他要求最短到达目的地距离(每两个相邻坐标间距离为 1)。你能帮他解决吗?
2025-04-24 14:42:04
282
原创 洛谷P208烤鸡 dfs全排列
因为他有 $10$ 种配料(芥末、孜然等),每种配料可以放 $1$ 到 $3$ 克,任意烤鸡的美味程度为所有配料质量之和。现在, Hanke 想要知道,如果给你一个美味程度 $n$ ,请输出这 $10$ 种配料的所有搭配方案。第二行至结束,$10$ 个数,表示每种配料所放的质量,按字典序排列。对于 $100\%$ 的数据,$n \leq 5000$。如果没有符合要求的方法,就只要在第一行输出一个 $0$。一个正整数 $n$,表示美味程度。### 样例输入 #1。### 样例输出 #1。
2024-12-11 11:50:48
357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人