Реализовал алгоритм Флойда, но задался вопросом,как сделать помимо вывода матрицы кратчайших путей, ещё и вывод матрицы расстояний, который показывает через какие точки нужно пройти,чтобы получился кратчайший путь. (Пример как выглядит матрица расстояний на скрине)
#include <iostream>
using namespace std;
int** mas = NULL;
int kol = 0;
//вычисление минимального пути по Флойду
void minFL(int** m, int kl)
{
for (int k = 0; k < kl; k++) {
for (int i = 0; i < kl; i++) {
for (int j = 0; j < kl; j++) {
if(m[i][j]>m[i][k]+m[k][j])
{
m[i][j] = m[i][k] + m[k][j];
}
}
}
}
}
int main()
{
setlocale(LC_ALL, "ru");
cout << "Введите число вершин графа" << endl;
cin >> kol;
if (kol < 1) {
return 0;
}
mas = new int* [kol];
for (int i = 0; i < kol; i++) mas[i] = new int[kol];
cout << "Введите матрицу смежности графа:" << endl;
for (int i = 0; i < kol; i++)
for (int j = 0; j < kol; j++) cin >> mas[i][j];
minFL(mas, kol);
cout << "Минимальные пути между вершинами:" << endl;
for (int i = 0; i < kol; i++) {
for (int j = 0; j < kol; j++) {
cout << mas[i][j] << " ";
}
cout << endl;
}
return 0;
Создайте массив для лучших соседей такого же размера.
В блоке оператора if
рядом с обновлением m[i][j]
добавьте
best[i][j] = best[i][k]
По окончанию работы основного алгоритма для данной пары вершин a,b
пройдите от best[a][b]
, пока не упрётесь в b
.
Пояснение: best[a][b]
хранит вершину, в которую нужно пойти из вершины a
, чтобы достичь b
оптимально. Если мы перешли в вершину с
, то теперь best[с][b]
хранит вершину, в которую нужно пойти из вершины с
, чтобы достичь b
оптимально.
Начальная инициализация best
- для каждой вершины best[a][a] = a
, для ребра a-b
best[a][b] = b
, остальное заполнить спецзначением (например, -1)
Wiki
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Решил таки посмотреть, какие изменения были введены в 20-ом стандарде и одно из первых изменений поставило меня в тупик: модулиЯ долго пытался...
компилятор выдает ошибки: maincpp:34:21: error: expected ‘;’ before string constant cout « "\n x=" « x « " y=" « y « " a=" « a « " с=" « с « " U=" « U; ^~~~~~~ main
Подскажите как я могу компилировать проекты в Sublime Text 3Пытался настроить "Build System" файл, но безрезультатно