int u[MAX,v[MAX],w[MAX];
int dist[MAX];
int n,m;
void bellman(int vs)
{
int i,j,k;
for(i=1;i<=n;i++)
dist[i] = inf;
dist[vs] = 0;
for(k=1;k<=n-1;k++)//最多需要松弛n-1次
{
int f = 0;
for(i=1;i<=m;i++)
{
if(dist[v[i]] > dist[u[i]] + w[i])
{
dist[v[i]] = dist[u[i]] +w[i];
f = 1;
}
}
if(f) break;
}
f = 0;
for(i=1;i<=m;i++) //如果还可以松弛
{
if(dis[v[i]] > dist[u[i]] +w[i])
f = 1;
}
if(f) printf("-1\n"); //存在负环
else printf("%d\n",dist[n]);
}

本文详细介绍Bellman-Ford算法的实现过程,该算法能够有效解决带负权边的最短路径问题,并能检测出图中是否存在负权重环。通过逐步解析算法的迭代过程,帮助读者理解其工作原理。
8256

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



