Julia 具有邻接矩阵的Floyd-Warshall算法

Julia 具有邻接矩阵的Floyd-Warshall算法,julia,Julia,我正在尝试实现floyd warshall算法,但它无法正常工作 我想要的是从一个顶点到另一个顶点的最短路径距离,写在矩阵d和矩阵pred中。输入是包含所有边权重的邻接矩阵 function FloWa(C) N = size(C) n = min(C[1],C[2]) pred = -1*ones(C[1],C[2]) d = C for k in 1:n for i in 1:n for j in 1:n if d[i,j] > d

我正在尝试实现floyd warshall算法,但它无法正常工作

我想要的是从一个顶点到另一个顶点的最短路径距离,写在矩阵d和矩阵pred中。输入是包含所有边权重的邻接矩阵

function FloWa(C)

N = size(C)
n = min(C[1],C[2])

pred = -1*ones(C[1],C[2])
d = C

for k in 1:n
    for i in 1:n
        for j in 1:n
            if d[i,j] > d[i,k] + d[k,j]
                if pred[i,k] == -1
                    pred[i,j] = k
                else
                    pred[i,j] = pred[k,j]
                end
                d[i,j] = d[i,k] + d[k,j]
            end
            if i == j && d[i,i] < 0
                    println("negative Dicycle")
            end
        end
    end
end
return d, pred
end
我没有得到正确的结果


对于d,我得到与A相同的矩阵,并且pred作为数组{Float64}(0,1)打印。

我没有检查算法的实现,但是您似乎初始化了
pred
d
不正确。这里有一种方法,我假设您缩进:

n = size(C, 1) # get number of rows in C
@assert n == size(C, 2) # make sure that C is square or throw an error
pred = fill(-1, size(C)) # fill pred with -1 and make it have the same size as C
d = copy(C) # d is a copy of C
n = size(C, 1) # get number of rows in C
@assert n == size(C, 2) # make sure that C is square or throw an error
pred = fill(-1, size(C)) # fill pred with -1 and make it have the same size as C
d = copy(C) # d is a copy of C