Что не так с моей программой C++ Floyd all-pairs shortest paths?

93
14

Я пытаюсь найти матрицу кратчайших пар всех пар для матрицы 5x5, но на выходе не отображается правильный ответ.

Вот исходная матрица и мой вывод:

enter image description here

Вот фактическое решение:

[0, 2, 3, 1, 4, 

6, 0, 3, 2, 5

10, 12, 0, 4, 7,

6, 8, 2, 0, 3,

3, 5, 6, 4, 0]

Как вы можете видеть, он правильно считывает исходную матрицу, но где-то в коде математика не применяется правильно, или что-то не работает.

Ниже мой код, вы можете найти мои ошибки?

int matrixFloyd(int *C, int n, int *A, string* s)
{

int i,j,k;

for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if ( *(C+i*n+j) == -1)
{
*(A+i*n+j) = 999999999;
}
else
{
*(A+i*n+j) = 1;
char sz[3]="";
sprintf(sz,"%d",j+1);
s[i*n+j]=sz;
}
}
}

for (i=0; i<n; i++)
{
*(A+i*n+i) = 0;
}

for (k=0; k<n; k++)
{
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if ( *(A+i*n+k) + *(A+k*n+j) < *(A+i*n+j) )

// A[i][j] = A[i][k] + A[k][j];
*(A+i*n+j) = *(A+i*n+k)+ *(A+k*n+j);
}
}
}

return 0;
}

спросил(а) 2012-04-18T22:35:00+04:00 8 лет, 6 месяцев назад
1
Решение
70

Вы игнорируете исходные значения C:

*(A+i*n+j) = 1;

Должно быть

*(A+i*n+j) = *(C+i*n+j);

ответил(а) 2012-04-18T22:46:00+04:00 8 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема