
图论
文章平均质量分 80
Corsini_7
我很懒,还没有添加简介
展开
-
SPFA---Bellman_Ford的优化
可以先看一下。原创 2024-11-06 16:43:58 · 920 阅读 · 0 评论 -
Bellman-Ford
Bellman−Ford可以处理负边权,查找负环。但是不能处理负权环。原创 2024-11-06 15:32:00 · 946 阅读 · 0 评论 -
Dijkstra的堆优化
我们把点和到集合的距离放入优先队列中,优先队列自动按照距离排序,最先弹出的点就是距离集合最近的点,避免了依次枚举查找最近点。优先队列可以被视为一个堆,具有在插入和弹出元素时自动调整元素顺序的能力,因此最高优先级的元素始终在队列的前面。是把点分成两个集合,一个集合是松驰过的, 一个没有,每次让距离集合最近的点进入集合。中的第一个数的大小,若第一个数大小相同在比较第二个数。基础版我们是依次枚举点寻找距离最近的集合。中的优先队列来优化这个过程,使得算法更优。结合起来,可以不写结构体和重载运算符。原创 2024-11-05 21:00:23 · 676 阅读 · 0 评论 -
最短路------Dijkstra(基础版)
(2)把顶点k加入到集合1中,同时检查集合2中的剩余顶点j的d[j]是否经过k后变短,如果变短修改d[j]。if(d[k]+a[k][j]<d[j])d[j]=d[k]+a[k][j]如果图是不带负权的有向图或者无向图,从起点a每次新扩展一个距离最短的顶点,在以这个顶点为中间点,更新起点到其他所有顶点的最短距离。(1)把集合2中找到一个到源点距离最近的顶点k:min{d[k]}将顶点分为两个集合:以求得最短路的点集合1,待求点集合2。d[i]:源点到i的最短距离。d[i]=a[源点][i]原创 2024-10-30 07:57:04 · 189 阅读 · 0 评论 -
最短路------Floyd详细版
Floyd算法求任意一对顶点间的最短路径。时间复杂度为O(n3),适用于负边权的情况。原理if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j]算法实现for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j]; } }原创 2024-10-28 17:46:19 · 422 阅读 · 0 评论 -
最短路---Floyd
使用三层循环,最外层枚举中间点,中间层枚举起点,内层枚举终点,然后对三个点进行松弛操作,即如果经过该中间点后的距离比原来的最短路径短,就更新最短路径。是唯一的多源最短路算法,即只要跑一次就可以求出任意两点间的最短路径。依次枚举中间点,不断更新矩阵,得到的最后一个矩阵就是最短路径。用邻接矩阵存图,可以处理负边权,但是不能处理负环.邻接矩阵存储最短路,即。原创 2024-10-28 17:34:45 · 309 阅读 · 0 评论 -
最小生成树——Prim算法
算法简介Prim算法采用与Dijkstra、Bellmaxn-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点。算法描述以1为起点生成最小生成树。minn[v]表示蓝点v与白点相连的最小边权。sum表示最小生成树的权值之和。初始化minn[v]=oo(v!=1)minn[1]=0sum=0简单的过程for(int i-1;i<=n;i++)寻找minn[v]最小的蓝点u;将u标记为白点;sum+=minn[u];for(与白原创 2022-01-03 17:02:06 · 1623 阅读 · 0 评论 -
最小生成树——Kruskal算法
引例有一张城市地图,图中顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市间修建高速公路的造价,研究后发现,这个地图有一个特点,即每一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使的工程的总造价最少?考虑问题的出发点是:为使生成树上边的权值和最小,则应使生成树中每一条边的权值尽可能的小。进入正题Kruskal算法是一种巧妙地利用并查集来求最小生成树的算法Kruskal算法讲一个连通块当做一个集合。Krustral首先将所有边按从小到大的顺序原创 2021-12-08 15:55:29 · 1885 阅读 · 0 评论