![](https://img-blog.csdnimg.cn/20210119130500806.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论
图
不太聪明的样子
这个作者很懒,什么都没留下…
展开
-
Kruskal算法模板(C语言)
Kruskal算法是求连通网的最小生成树的另一种方法,该算法的思想是从小到大加入边,是个贪心算法,算法的时间主要消耗在对边进行排序,时间复杂度为O(eloge),适合求边数较少图的最小生成树。算法步骤:1.记录边的信息,要有边对应的点的编号2.以边权值进行排序3.每次从小到大取一条边,如果两个点不是同一个集合,就合并;否则就继续查看下一条边4.当边数为n - 1时结束遍历,得到最小生成树代码如下:#include <stdio.h>#include <stdlib.h>原创 2021-01-08 21:20:57 · 366 阅读 · 0 评论 -
Prim算法模板(C语言)
Prim算法Prim算法是一种常见并且好写的最小生成树算法。该算法的基本思想是从一个节点开始,不断加点 (这里假设节点为1~n),适用于点少边多的图。算法步骤:1.用二维矩阵记录每两点之间的费用2.用一个dist数组维护各点与点集的最短距离3.随便选一个起点,这里选1号点,然后每次选一个距离点集最近的点加入集合4.更新dist数组朴素prim算法1.邻接矩阵存图#include <stdio.h>const int N = 1010, INF = 1e9;int dist原创 2021-01-08 20:09:00 · 355 阅读 · 0 评论 -
Floyd算法模板(C语言)
Floyd算法Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。算法过程1.从任意一条单边路径开始。所有两点之间的距离是边的全,如果两点之间没有边相连,则权为无穷大。2.对于每一对顶点u和v,看看是否存在一个顶点w使得从u到w再到v比已知的路径更短。如果是则更新它。Floyd算法适用于APSP(All Pairs Shortest Paths,多源最短路径),是一种动态规划算法,稠密图效果最佳,边权可正可负。此算法简单有效,原创 2021-01-03 20:42:57 · 184 阅读 · 0 评论 -
SPFA算法模板(C/C++)
单源最短路径算法,可以用于解决带负边权的情况。是队列优化的Bellman-Ford算法,时间复杂度O(nm)。朴素spfa算法模板#include <stdio.h>#include <string.h>const int N = 1010, M = 2e6, INF = 1e9;int n, m; //n是节点数,m是边数int dist[N], q[N]; //dist[i]表示源点到i点的最短距离int h[N], to[M], w[M], ne[M], id原创 2021-01-03 20:12:10 · 917 阅读 · 0 评论 -
Dijkstra模板(C语言)
dijkstra的经典的单源最短路径算法,用于求解无负边权的最短(最长)路问题。主要特点是从起点开始,采用贪心方法的策略,每次遍历到离源点最近且未访问过的邻接节点,直到扩张到终点为止。算法步骤:1.初始化dist数组为INF(dist[i]表示源点到i的最短距离)2.预处理,将dist[s]设为0,自己到自己的距离为0,且将s点与其邻接点的距离更新到dist数组中3.从未收录的结点中选择距离最近结点的收录4.将s点与收录点的所有未邻接点的距离更新(贪心)朴素dijkstra1.当图中节点较少(原创 2021-01-02 18:10:38 · 535 阅读 · 0 评论