//Bellman-ford算法核心语句dis[]都是记录源点到各个顶点的最小距离
for(k = 1;k <= n-1;k ++)
for(i = 1;i <= m;i ++)
if(dis[v[i]] > dis[u[i]] + w[i])
dis[v[i]] = dis[u[i]] + w[i];
//初始化dis数组,(1号顶点到个各个顶点的初始距离)
for(i = 1;i <=n;i ++)
dis[i]=inf;
dis[1]=0;
for(k=1;k<=n-1;k++)
{
for(i=1;i<=n;i++)
bak[i]=dis[i];//(拷贝dis[i])
for(i=1;i<=m;i++)
if(dis[v[i]] > dis[u[i]] + w[i])
dis[v[i]] = dis[u[i]] + w[i];
check=0;
for(i=1;i<=n;i++)
if(bak[i]!=dis[i])
{
check=1;
break;
}
if(check=0)
break;//如果dis没有更新就直接退出循环
}
//检测负权回路
flag=0;
for(i=1;i<=m;i++)
if(dis[v[i]] > dis[u[i]] + w[i])
flag=1;
if(flag==1)
printf("有负权路") ;