implemented Floyd algorithm, but wondered how to do in addition to the output of the matrix of the shortest paths,
Even the output of the distance matrix that shows through what points it is necessary to go through the shortest path. (Example What does the distances matrix look like on the screen)
# include & lt; iostream & gt;
Using Namespace STD;
Int ** MAS = NULL;
int kol = 0;
// Calculating the minimum path on Floyd
void minfl (int ** m, int kl)
{
For (int k = 0; k & lt; kl; k ++) {
For (int i = 0; i & lt; kl; i ++) {
For (int j = 0; j & lt; kl; j ++) {
if (m [i] [j] & gt; m [i] [k] + m [k] [j])
{
m [i] [j] = m [i] [k] + m [k] [j];
}
}
}
}
}
INT MAIN ()
{
SetLocale (LC_ALL, "RU");
COUT & LT; & LT; "Enter the number of vertices of the graph" & lt; & lt; Endl;
CIN & GT; & GT; kol;
if (kol & lt; 1) {
Return 0;
}
MAS = new int * [kol];
for (int i = 0; i & lt; kol; i ++) mas [i] = new int [kol];
COUT & LT; & LT; "Enter the arrangement matrix of the graph:" & lt; & lt; Endl;
for (int i = 0; i & lt; kol; i ++)
for (int j = 0; j & lt; kol; j ++) CIN & GT; & gt; MAS [i] [J];
minfl (MAS, KOL);
COUT & LT; & LT; "The minimum paths between the vertices:" & lt; & lt; Endl;
for (int i = 0; i & lt; kol; i ++) {
For (int j = 0; j & lt; kol; j ++) {
COUT & LT; & LT; Mas [i] [j] & lt; & lt; "";
}
COUT & LT; & LT; Endl;
}
Return 0;
Answer 1, Authority 100%
Create an array for the best neighbors of the same size.
In the if
statement unit>near the m [i] update [J]
add
best [i] [j] = Best [i] [k]
At the end of the main algorithm for this pair of vertices a, b
Go from Best [A] [b]
until you do B
.
Explanation: Best [A] [b]
Stores the vertex to which you need to go from the vertex a
to reach B
optimally. If we moved to the top of with
, now Best [C] [b]
stores the top to which you need to go from the vertex with
to achieve b
optimally.
Starting Initialization Best
– For each vertex Best [A] [A] = A
, for the edge AB
Best ] [b] = b
, the rest is filled with special design (for example, -1)