Ошибки поиска кратчайшего пути ФлойдаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибки поиска кратчайшего пути Флойда

Сообщение Anonymous »

Я пытаюсь написать программу на C++, которая будет использовать алгоритм Флойда для вычисления матриц для кратчайшего пути между любыми двумя вершинами на графике, а также длин пути и промежуточных вершин, с моим кодом первые две работают ну, а третий нет.
Вот мой текущий код:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

const long INF = numeric_limits::max();

void display_table(const vector &matrix, const string &label, const bool use_letters = false) {
// Determine the maximum cell value for formatting purposes
long max_val = 0;
for (const auto &row : matrix) {
for (long cell : row) {
if (cell < INF && cell > max_val) {
max_val = cell;
}
}
}

// Compute the width for formatting each cell
int max_cell_width = use_letters ? 1 : max(static_cast(to_string(max_val).length()), 1);
if (!label.empty()) {
cout  D, distance: 22, path: E -> A -> D
E -> E, distance: 0, path: E
E -> F, distance: 10, path: E -> F
E -> G, distance: 2, path: E -> G
F -> A, distance: 19, path: F -> B -> A
F -> B, distance: 12, path: F -> B
F -> C, distance: 16, path: F -> B -> C
F -> D, distance: 32, path: F -> B -> A -> D
F -> E, distance: 40, path: F -> B -> A -> D -> E
F -> F, distance: 0, path: F
F -> G, distance: 41, path: F -> B -> A -> D -> G
G -> A, distance: 38, path: G -> E -> A
G -> B, distance: 49, path: G -> E -> A -> B
G -> C, distance: 5, path: G -> C
G -> D, distance: 51, path: G -> E -> A -> D
G -> E, distance: 29, path: G -> E
G -> F, distance: 39, path: G -> E -> F
G -> G, distance: 0, path: G
Когда ответ должен был быть таким:

Код: Выделить всё

Distance matrix:
A  B  C  D  E  F  G
A  0 11  - 13  -  -  -
B  7  0  4  -  -  -  -
C  -  -  0  -  -  -  -
D  -  -  -  0  8  -  9
E  9  -  -  -  0 10  2
F  - 12 19  -  -  0  -
G  -  -  5  - 29  -  0

Path lengths:
A  B  C  D  E  F  G
A  0 11 15 13 21 31 22
B  7  0  4 20 28 38 29
C  -  -  0  -  -  -  -
D 17 28 14  0  8 18  9
E  9 20  7 22  0 10  2
F 19 12 16 32 40  0 41
G 38 49  5 51 29 39  0

Intermediate vertices:
A B C D E F G
A - - B - D E D
B - - - A D E D
C - - - - - - -
D E E G - - E -
E - A G A - - -
F B - B B D - D
G E E - E - E -

A -> A, distance: 0, path: A
A -> B, distance: 11, path: A -> B
A -> C, distance: 15, path: A -> B -> C
A -> D, distance: 13, path: A -> D
A -> E, distance: 21, path: A -> D -> E
A -> F, distance: 31, path: A -> D -> E -> F
A -> G, distance: 22, path: A -> D -> G
B -> A, distance: 7, path: B -> A
B -> B, distance: 0, path: B
B -> C, distance: 4, path: B -> C
B -> D, distance: 20, path: B -> A ->  D
B -> E, distance: 28, path: B -> A -> D -> E
B -> F, distance: 38, path: B -> A -> D -> E -> F
B -> G, distance: 29, path: B -> A -> D -> G
C -> A, distance: infinity, path: none
C -> B, distance: infinity, path: none
C -> C, distance: 0, path: C
C -> D, distance: infinity, path: none
C -> E, distance: infinity, path: none
C -> F, distance: infinity, path: none
C -> G, distance: infinity, path: none
D -> A, distance: 17, path: D -> E -> A
D -> B, distance: 28, path: D -> E -> A -> B
D -> C, distance: 14, path: D -> G -> C
D -> D, distance: 0, path: D
D -> E, distance: 8, path: D -> E
D -> F, distance: 18, path: D -> E -> F
D -> G, distance: 9, path: D -> G
E -> A, distance: 9, path: E -> A
E -> B, distance: 20, path: E -> A -> B
E -> C, distance: 7, path: E -> G -> C
E -> D, distance: 22, path: E -> A -> D
E -> E, distance: 0, path: E
E -> F, distance: 10, path: E -> F
E -> G, distance: 2, path: E -> G
F -> A, distance: 19, path: F -> B -> A
F -> B, distance: 12, path: F -> B
F -> C, distance: 16, path: F -> B -> C
F -> D, distance: 32, path: F -> B -> A -> D
F -> E, distance: 40, path: F -> B -> A -> D -> E
F -> F, distance: 0, path: F
F -> G, distance: 41, path: F -> B -> A -> D -> G
G -> A, distance: 38, path: G -> E -> A
G -> B, distance: 49, path: G -> E -> A -> B
G -> C, distance: 5, path: G -> C
G -> D, distance: 51, path: G -> E -> A -> D
G -> E, distance: 29, path: G -> E
G -> F, distance: 39, path: G -> E -> F
G -> G, distance: 0, path: G

Мне нужна помощь по этому вопросу.

Подробнее здесь: https://stackoverflow.com/questions/792 ... der-errors
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»