Floyd的Python算法

时间:2013-07-19 10:55:51

标签: python

我不确定如何在以下程序中实现Floyd的算法。它必须打印一个表示此图on page 466的5x5数组,并包含一个计数器,用于在算法执行时打印比较总数 - 每次执行“if”结构都算作一次比较。

有谁知道如何开始这个程序?我不知道该如何开始。

2 个答案:

答案 0 :(得分:3)

以下纯粹是您链接的伪代码的转录。我什么都没改变。

for k in range(n):
    for i in range(n):
        for j in range(n):
            if A[i][k]+A[k][j]<A[i][j]:
                A[i][j]=A[i][k]+A[k][j]

答案 1 :(得分:2)

从您关联的网页翻译,

k=0
while (k <= n-1):
    i=0
    while (i<=n-1):
        j=0
        while(j<=n-1):
            if(A[i,k] + A[k,j] < A[i,j]):
                A[i,j] = A[i,k] + A[k,j]
            j += 1
        i += 1
    k += 1

NB这是Python的确切翻译。 更好,更多Pythonic代码也是可能的 - 参见,例如5xum的答案 它使用range函数而不是手动递增循环计数器。

此处A也是2d矩阵(例如numpy ndarray)。 查看有关numpy here

的更多信息