最短路径算法2——Bellman-Ford与SPFA算法

Bellman-Ford算法:

只能计算单源最短路径,时间复杂度为O(nm)n是顶点数,m是边数。

其实这个算法很简单,代码实现也很简单,大致和Floyed差不多吧。

循环n-1次,每次循环遍历所有边,必然会有一些边连接着蓝点与白点。因此每次都能用所有的白点去修改所有的蓝点。所以这个算法只是理论模拟了蓝点白点,并没有真正实现。

Bellman-Ford代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #define N 42000
 4 using namespace std;
 5 int n,m,p,q,a[N],b[N],c[N],d[N];
 6 int main(){
 7     scanf("%d%d%d%d",&n,&m,&p,&q);
 8     for(int i=1;i<=m;++i)
 9         scanf("%d%d%d",&a[i],&b[i],&c[i]);
10     for(int i=1;i<=n;++i)
11         d[i]=42000000;
12     d[p]=0;
13     for(int i=1;i<n;++i)
14         for(int j=1;j<=m;++j)
15             d[b[j]]=min(d[b[j]],d[a[j]]+c[j]);
16     printf("%d",d[q]);
17     return 0;
18 }
View Code

相关文章:

  • 2021-12-02
  • 2021-07-06
  • 2021-12-12
  • 2021-09-30
猜你喜欢
  • 2022-12-23
  • 2021-08-10
  • 2021-05-25
相关资源
相似解决方案