Floyd-Warshall's Algorithm - problem z macierzą; nic nie liczy, na wy same 0

0

Mam problem z alg. Floyd Warshall - nie wiem, czego to wina, ale coś jest źle, bo na wy mam same 0 ...

from numpy import zeros

def FloydWarshall(N, A) :
    for k in range (0, N) :
        for i in range (0, N) :
            for j in range (0, N) :
                if A[i][j] > A[i][k] + A[k][j] :
                    A[i][j] = A[i][k] + A[k][j]
                    
N = int(input("Ilosc wierzcholkow: "))
M = int(input("Ilosc krawedzi: "))

A = zeros((N,N), float)

for i in range (0, M) :
    u = int(input("Poczatek (u): "))
    v = int(input("Koniec (v): "))
    w = float(input("Waga (w): "))
    A[u-1][v-1] = w

print (A)
FloydWarshall(N, A)
print (A)

for i in range (0, N) :
    for j in range (0, N) :
        print(str(i+1) + " -> " + str(j+1) + " dl. " + str(A[i][j]))

Przykładowe dane:

10 17
1 2 13
1 9 33
2 3 27
2 4 1
2 10 8
2 9 9
3 4 10
4 10 11
4 6 2
4 5 3
5 6 9
6 10 666
6 7 66
7 8 333
7 9 33
9 10 3
6 9 15
0

Jak domyślnie wszędzie w tablicy masz zera, to ten algorytm ścieżki ujemnej Ci nie znajdzie.

0

Właśnie na to wpadłem - jednak to też daje złe wyniki. Znalazłem jakiś kod C++ w Internecie, i on daje inne wyniki, niż mój ...

from numpy import zeros
import sys

def FloydWarshall(N, A) :
    for k in range (0, N) :
        for i in range (0, N) :
            for j in range (0, N) :
                if A[i][j] > A[i][k] + A[k][j] :
                    A[i][j] = A[i][k] + A[k][j]
                    
N = int(input("Ilosc wierzcholkow: "))
M = int(input("Ilosc krawedzi: "))

A = zeros((N,N), float)
A.fill(sys.maxsize)
for i in range (0, N) :
    A[i][i] = 0

for i in range (0, M) :
    u = int(input("Poczatek (u): "))
    v = int(input("Koniec (v): "))
    w = int(input("Waga (w): "))
    A[u-1][v-1] = w

for i in range (0, N) :
    for j in range (0, N) :
        print(str(i+1) + " -> " + str(j+1) + " dl. " + str(A[i][j]))

W sumie to nie jest jakiś trudny program, ale już się poplątełem i nie wiem - może ktoś zweryfikowac, czy to daje dobre wyniki? (Chcę mieć graf skierowany btw)

1 użytkowników online, w tym zalogowanych: 0, gości: 1