Я хочу проверить, есть ли у моего взвешенного графика отрицательный цикл. Для использования алгоритма Беллмана-Форда нам нужно выбрать исходный узел, инициализировать все остальные расстояния до бесконечности и начать расслабление n-1 раз, если количество вершин равно n. Моя проблема в том, что недостижимые узлы будут иметь бесконечное расстояние повсюду и также не будут изменены на n-й итерации. Таким образом, для недостижимого отрицательного цикла мы получаем неверный результат.
def negative_cycle(adj, cost):
dist = [float('inf')] * n
prev = [None] * n
dist[0] = 0
for _ in range(n-1):
for u, edges in enumerate(adj):
for i, v in enumerate(edges):
if dist[v]>dist[u]+cost[u][i]:
dist[v]=dist[u]+cost[u][i]
prev[v]=u
for u, edges in enumerate(adj):
for i, v in enumerate(edges):
if dist[v]>dist[u]+cost[u][i]:
return 1
return 0