У меня есть матрица смежности, которая содержит числа 0 и 1. Если нет ребра от одного узла к другому, поле будет равно 0, в противном случае поле будет помечено как 1.
Тогда, если поле в матрице смежности было 0, между узлами нет ребра, иначе есть ребро с весом 1.
Теперь я применил алгоритм Флойда, чтобы найти кратчайший путь от любого узла к каждому другому узлу. Но я не нашел правильного решения.
Вот моя реализация алгоритма Флойда.
void Floyd_Warshal(int graph[Nodes][Nodes], int D[Nodes][Nodes])
{
for (int i = 0; i < Nodes; i++)
{
for (int j = 0; j < Nodes; j++)
{
if (graph[i][j] == 0) { graph[i][j] = INT_MAX; }
D[i][j] = graph[i][j];
}
}
for (int k = 0; k < Nodes; k++) {
for (int i = 0; i < Nodes; i++)
{
for (int j = 0; j < Nodes; j++)
{
if (D[i][j] > D[i][k] + D[k][j]) {
D[i][j] = D[i][k] + D[k][j];
}
}
}
}
}
Я установил 0 как INT_MAX
, чтобы построить стандартную матрицу для алгоритма, но я не получил правильного решения.
Также вот пример моей матрицы:
A B C D
A 0 0 1 0
B 1 1 0 1
C 0 0 1 0
D 1 0 0 0
После применения матрицы к алгоритму любой 0 в матрице будет преобразован в INT_MAX
. Я ожидаю получить вес как 2 или 1, но получаю неожиданные значения, такие как -2712323 ...