算法思想:如果没有负权回路,dis数组应该会在n-1次松弛之后结束。
算法复杂度:O(n*m)。比Dijkstra算法复杂度要高。
代码:
bool Bellman_Ford(int s)
{
int i,j,k;
for(i=;i<=n;i++)
dis[i] = Mod;
dis[s] = ;
for(i=;i<n-;i++)
{
for(j=;j<n;j++)
{
if(dis[j] == Mod)
continue;
for(k=head[j];k!=-;k=G[k].next)
{
if(G[k].w != Mod && dis[G[k].v] > dis[j] + G[k].w)
dis[G[k].v] = dis[j] + G[k].w;
}
}
}
for(j=;j<n;j++)
{
if(dis[j] == Mod)
continue;
for(k=head[j];k!=-;k=G[k].next)
{
if(G[k].w != Mod && dis[G[k].v] > dis[j] + G[k].w)
return false;
}
}
return true;
}