最近复习了下最短路,顺便写篇博客加强下自己的印象

1.Floyd算法
我认为是最短路最简单的算法,但一般来说简单的都不是什么好东西,因为复杂度比较高;
*核心思想:
要缩短两点之间的距离,就需要第三个顶点来松弛。
*具体步骤:
依次用1到n号顶点做中转,松弛任意两点之间的距离。
因为这个算法比较简单,就直接上代码了;
#include<iostream>
using namespace std;
const int N=2000;
int main()
{
int maps[N][N];
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
if(i==j)
maps[i][j]=0;//起点和终点相同,路程为0
else
maps[i][j]=INT_MAX;//一开始没有路,则全部是无穷大
}
int n,m;//假设有n条路,m个城市
cin>>n;
int a,b,c;
for(int i=1;i<=n;i++)
{
cin>>a>>b>>c;
maps[a][b]=c;
maps[b][a]=c;//假设是双向路
}
for(int i=1;i<=m;i++)//枚举用来松弛的点
for(int j=1;j<=m;j++)
for(int k=1;k<=m;k++)
{
if

本文深入解析三种经典的最短路径算法:Floyd算法、Dijkstra算法和Bellman-Ford算法。详细介绍各算法的核心思想、具体步骤及代码实现,特别强调Dijkstra算法的优先队列优化版和Bellman-Ford算法解决负权边的能力。
最低0.47元/天 解锁文章
9170

被折叠的 条评论
为什么被折叠?



