Алгоритм Форда-Беллмана - восстановление пути
По курсовой нужна программная реализация этого алгоритма. Но застряла на этапе восстановления пути по вершинам, помогите, пожалуйста.
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], потом его предка, и так разматываете до начальной вершины