0

5x5行列のすべてのペアの最短経路行列を見つけようとしていますが、出力に正しい答えが表示されていません。

これが初期マトリックスと私の出力です:

ここに画像の説明を入力してください

ただし、実際の解決策は次のとおりです。

[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;
}
4

1 に答える 1

2

元のC値を無視しています。

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

する必要があります

*(A+i*n+j) = *(C+i*n+j);
于 2012-04-18T19:46:11.947 に答える