Что вам не хватает, так это то, что |i - j|
не связано с расстоянием между i
и j
.
Алгоритм Варшала делает на итерации k определение того, существует ли путь между вершиной, помеченной i, и вершиной, помеченной j, с использованием только вершин из {1, ..., k}
в качестве промежуточных. Следовательно, R(k)[i,j]
должно равняться 1, если выполняется одно из следующих двух условий:
R(k-1)[i,j] = 1
. То есть существует путь между вершиной i и вершиной j, использующий только вершины из {1, ..., k-1}
в качестве промежуточных.
R(k−1)[i, k] and R(k−1)[k, j]
. То есть существует путь от вершины i до вершины k, и существует путь от вершины k до вершины j, каждая из которых использует только вершины среди {1, ..., k-1}
в качестве промежуточных.
Значения i
или j
(и |i-j|
в этом отношении) не имеют никакого отношения к расстояниям между вершиной i
и вершиной j
. Это произвольные метки, служащие идентификаторами для вершин.