Предположим, что в G,
Для каждого ребра между узлами vi а также vj в G, позволять E[i,j]=1, а также E[i,j]=0если нет края. вычислениеn×n матрица C[i,j]=∑nk=1E[i,k]⋅E[k,j], который дает количество двухшаговых путей между каждой парой узлов vi а также vj, Тогда для края междуvi а также vj в G вычисление D[i,j]=E[i,j]⋅C[i,j] иначе установлено D[i,j]=∞, который дает количество треугольников, частью которых является ребро (или бесконечность, если ребра нет). Матричное умножение, необходимое для вычисленияC расходы O(n3) (может быть вычислено быстрее в зависимости от разреженности G).
Теперь вычислим n×n матрица Aтакой, что A[i,j]=min(D[i,j],mink(D[i,k]+D[k,j]−E[i,j])), A все кратчайшие пути в D длиной до двух дополнен, чтобы учесть пути, которые идут по двум краям некоторого треугольника.
Теперь просто вычислите кратчайший путь между vi а также vj в G на новом графике которого A является (взвешенной) матрицей смежности с использованием Дейкстры (поскольку все ребра-веса положительны), т.е. A∗[i,j]≤k, где A∗ это замыкание над тропическим полукольцом (которое дает матрицу расстояний).