最短路径四种解法

本文介绍了图论中最短路径问题的四种经典解法:弗洛伊德算法、迪杰斯特拉算法、贝尔曼·福特算法以及SPFA(贝尔曼·福特的队列优化)。各算法的特点包括时间复杂度、适用场景和时效性,例如弗洛伊德算法适用于多源无负权边的情况,而迪杰斯特拉和贝尔曼·福特则考虑了单源和负权重的问题。SPFA在效率上有所提升。
摘要由CSDN通过智能技术生成

最短路径的四种解法

在学习“图”的时候,遇到过一道经典的题:最短路径。最短路径有四种最经典的解法。废话不多说,直接上代码。

弗洛伊德算法

//Floyd-Warshall
#include<iostream> 
using namespace std;
const int M=999999; 
int n,m,p1,p2,l;
int map[1000][1000];
int main()
{
   
 cin>>n>>m;
 for (int i=1;i<=n;i++)
 {
   
  for (int j=1;j<=n;j++)
  {
   
   if (i==j)
   {
   
    map[i][j]=0;
   }
   else
   {
   
    map[i][j]=M;
   }
  }
 }
 for (int i=1;i<=m;i++)
 {
   
  cin>>p1>>p2>>l;
  map[p1][p2]=l;
 }
  for (int k = 1; k <= n; k++) {
   
    for (int i = 1; i <= n; i++) {
   
      for (int j = 1; j <= n; j++) {
   
        if (map[i][j] > map[i][k] + map[k][j]) {
   
          map[i][j] = map[i][k] + map[k][j];
        }
      }
    }
}
 for (int i=1;i<=n;i++
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值