Алгоритм Форда-Беллмана - восстановление пути

По курсовой нужна программная реализация этого алгоритма. Но застряла на этапе восстановления пути по вершинам, помогите, пожалуйста.

static final double INF = Double.POSITIVE_INFINITY;

public static void BellmanFord(double[][] z, int start, int end) {
    int verticesCount = z.length;

    double[] q = new double[verticesCount];
    ArrayList<Double> labels = new ArrayList<>();

    for (int i = 0; i < verticesCount; i++) {
        q[i] = INF;
    }

    q[start - 1] = 0.0;

    for (int k = 0; k <= verticesCount - 1; k++) {
        for (int i = 0; i < verticesCount; i++) {
            for (int j = 0; j < verticesCount; j++) {
                labels.add(q[j] + z[j][i]);

            }
            q[i] = minOfArray(labels);
            labels.clear();
        }
    }
    System.out.println(q[end - 1]);
}

public static double minOfArray(ArrayList<Double> array) {
    double min = INF;
    for (int i = 0; i < array.size(); i++) {
        if (min > array.get(i))
            min = array.get(i);
    }
    return min;
}

Ответы (1 шт):

Автор решения: MBo

В момент срабатывания условия if (min > array.get(i)) запишите в дополнительный список preds номер i (локальное i функции minOfArray!!) лучшего предка для вершины i (локальное i цикла for (int i = 0; i < verticesCount; i++)).

По окончанию работы для нахождения пути в вершину q берете её предка preds[q], потом его предка, и так разматываете до начальной вершины

→ Ссылка