0

http://www.cs.bu.edu/fac/byers/courses/791/F99/scribe_notes/cs791-notes-990923.html(C
++)を使用して、距離ベクトルルーティングアルゴリズムを実装しようとしています。

これが私がしたことです

遠い:

i) Read no. of nodes.

ii) Implement the points 1 to 4 in the article as:

     for(i = 0; i < nodes; i++) //nodes is the no. of nodes
     {
         for(j = 0; j < nodes; j++)
         {
             if(distanceVector[i][j] != 0) //distanceVector holds the cost value between every pair of links, 0 if no link exists
             {
                  for(k = 0; k < nodes; k++)
                  {
                       if((distanceVector[i][j] + distanceVector[j][k]) < distanceVector[i][k])
                       {
                             distanceVector[i][k] = distanceVector[i][j] + distanceVector[j][k];
                             via[i][j] = i; // intermediate node, in case no link exists
                             via[j][i] = j;
                       }
                  }
              }
         }
     }

私はそれと同じ配列/行列を取得します。i、j、kもジャグリングしてみましたが、ダメです。

私は私の実装で正しいですか...???

4

1 に答える 1

1

あなたのコードについて2つのことが気になります。まず、「リンクなし」を表すために「0」を使用しています。これにより、問題が発生する可能性があります。コードは基本的に次のように読み取られます。したがって、「0」を使用して「リンクなし」を表すと、コードで間違った「経由」が選択される可能性があります。代わりに、無限大 (浮動小数点を使用している場合) または非常に大きな値 (MAX_INT など) を使用してみてください。

第二に、これらの行は間違っているように見えます:

via[i][j] = i; // intermediate node, in case no link exists
via[j][i] = j;

i から j を経由して k までの短いパスを見つけたので、次のようになります。

via[i][k] = j; // intermediate node, in case no link exists
via[k][i] = j;
于 2012-08-22T13:46:31.017 に答える