对于BF算法,我们主要是用于解决Dijkstra算法不能解决的问题,我们之前说到,Dijkstra算法的使用范围是结点之间的边权为正数的情况。所以BF算法可以解决边权为负的情况。
我们考虑环的问题,我们可以知道,如果某个点经过一系列的点后回到自身后,如果边权之和为正的话,则称为正环,为0则为零环,为负则为负环。对于正环和零环的情况,我们可以知道不会影响最短路径的取值,但是如果出现负环,我们的算法就很可能受到影响。但是,因为我们考虑的是有向图的情况,如果我们从源点出发不能通过该负环到达我们要源点自身,那么最短路径的求法还是不会受到影响的。
下面这种的是Bellman—Ford算法,其实这种的和Dijkstra算法相比就是这个多了一个最外层的n-1次循环。
bool Bellman(int s){
fill(d,d+maxn,INF);
fill(num,num+maxn,0);
fill(w,w+maxn,0);
d[s]=0;
w[s]=weight[s];
num[s]=1;
for(int i=0;i<n-1;i++){
for(int u=0;u<n;u++){
for(int j=0;j<Adj[u].size();j++){
int v=Adj[u][j].v;
int dis=Adj[u][j].dis;
if(d[u]+dis<d[v]){
w[v]=w

本文介绍了Bellman-Ford算法在处理包含负权边的最短路径问题上的应用,以及如何通过SPFA优化算法效率。同时,讲解了Floyd算法在求解全源最短路径中的作用,强调了这三种算法的核心思想是通过比较路径进行更新,并建议先掌握Dijkstra算法来更好地理解后续优化算法。
最低0.47元/天 解锁文章
1万+

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



