首页 > 其他分享 >Floyd

Floyd

时间:2023-01-04 20:46:42浏览次数:35  
标签:题意 int 短路 Floyd MAXN 节点

use C++11

是一种求多源最短路的算法,但复杂度较高,为 \(\mathcal{O}(n^3)\),不过常数较小,编码简单。(只有 3 个 for

我们设三个节点 \(k,u,v\),我们求 \(u\) 到 \(v\) 的最短路,可以找出中间结点 \(k\),将问题转化成 \(u\) 到 \(k\) 再到 \(v\) 的最短路,即:\(u\) 到 \(v\) 的最短路等于 \(u\) 到 \(k\) 的最短路加上 \(k\) 到 \(v\) 的最短路。

设 \(f_{u,v}\) 表示 \(u\) 到 \(v\) 的最短路,在最开始每个节点之间的最短路都不知道,我们算作无限,后面根据题意建立边,边上的两点肯定为最短路。然后,根据上述推论,可得 \(f_{u,v}=f_{u,k}+f_{k,v}\)。

当然,Floyd 需要保证有最短路,即图中不能存在负环。

下面就是代码。

//有向边的Floyd
int f[MAXN][MAXN],n,m;
memset(f,0x3f,sizeof f);
cin>>n>>m;
int a,b,w;
for(int i=1;i<=m;i++)
	cin>>a>>b>>w,f[a][b]=w;
for(int k=1;k<=n;k++)
	for(int u=1;u<=n;u++)
		for(int v=1;v<=n;v++)
			f[u][v]=min(f[u][v],f[u][k]+f[k][v]);
//f[i][j]即为i到j的最短路,若f[i][j]=0x3f3f3f3f,那么i与j不成通路

标签:题意,int,短路,Floyd,MAXN,节点
From: https://www.cnblogs.com/wanguan/p/17025894.html

相关文章

  • 算法之Floyd-Warshall算法【c++】【图论】【最短路】
    我们作为刚学图论的小蒟蒻,先接触到的算法一定是图上最短路径算法。而最短路算法中最简单的当属Floyd-Warshall算法。下面是一些基本介绍:​该算法可以计算图上任意两点间......
  • Floyd算法
    Floyd算法dijistra算法解决,从一点出发,到其它所有点的最短路径。此算法解决,从任何一点出发,到任何点的最短路径。https://zhuanlan.zhihu.com/p/87480486理解......
  • HDU-5418 Floyd + DP
    题目传送门时间复杂度:\(O(2^n\cdotn^2)\)注意:输入尽量用scanf输入,输入需要记录两个路径的最小值代码:#include<iostream>#include<queue>#include<vector>#......
  • 经典算法——最短路径(Floyd+Dijkstra)
    Floyd时间复杂度:O(n^3)简介:作为最短路算法中复杂度最高的算法没有之一,标志性结构三层循环,核心结构本质DP思想具 有动态规划的无后效性他真的没有优点啦?!不,他有!虽然SPF......
  • Floyd算法(最短路径)
    Floyd算法允许图中有带负权值的边,但不许有包含带负权值的边组成的回路。     上一篇文章我们通过迪杰斯特拉算法解决了从某个源点到其余各顶点的最短路径问题。从循......
  • [边数限制最短路 倍增floyd 矩阵优化]Cow Relays G
    [边数限制最短路倍增floyd矩阵优化]CowRelaysG题目思路边数限制的最短路?bellman_ford可以拿来解决边数<=k的最短路,但这题是边数恰好为k,可以通过奇妙操作改成恰好经过k......
  • [图论]floyd统计最小环个数
    使用floyd可以求解最小环问题.单纯需要求出最小环长度,方法显而易见最小环-OIWiki(oi-wiki.org)然而,如果需要统计最小环的个数,就比较麻烦.记\(cnt_{i,j}\)表示从\(i......
  • Floyd算法的关键点
    Floyd算法的代码很简单,就是三个for这个算法最重要的地方就是中转点的枚举for(intk=1;k<=n;k++)for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)g[i][j]=max(g[i][j],g[i......
  • 数据结构 最短生成路径(BFS算法、Floyd(弗洛伊德)算法、Dijkstra算法)
    8.9、最短生成路径-BFS算法BFS算法只能处理无权图BFS算法的基本思想代码实现#include<stdio.h>#include<stdlib.h>#include<math.h>#defineMaxSize100#defin......
  • java-floyd最短距离算法
    java-floyd最短距离算法publicstaticvoidmain(String[]args){MatrixDGmatrixDG=newMatrixDG();System.out.println("初始化邻接矩阵");matrixDG.print......