存在负权回路为1,不存在为0。
下面标记星号的意思是如果所有的路径已经是最优的,就不用更新了直接break。如果不加带星号的这两行的话的话,数据一多就可能超时。
Bellman-Ford spfa(int t) //从t点开始遍历
{
dis[t] = 0;
for(int i = 1; i <= n - 1; i++)
{
int flag = 0; ××××××××××××××××××××××××××××××
for(int j = 1; j <= tot; j++)
{
if(dis[p[j].v] > p[j].w + dis[p[j].u])
{
dis[p[j].v] = dis[p[j].u] + p[j].w;
flag = 1;
}
}
if(!flag) break; ××××××××××××××××××××××××××××××××××
}
for(i = 1; i <= tot; i++)
{
if(dis[p[i].v] > p[i].w + dis[p[i].u])
{
return 1;
}
}
return 0;
}