Я пытаюсь написать программу на 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
Я пытаюсь написать программу на C++, которая будет использовать алгоритм Флойда для вычисления матриц для кратчайшего пути между любыми двумя вершинами на графике, а также длин пути и промежуточных вершин, с моим кодом первые две работают ну, а третий нет. Вот мой текущий код: [code]#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 [/code] Когда ответ должен был быть таким: [code]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