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

关于您的代码,有两件事困扰着我。首先,您使用“0”表示“无链接”。这会给你带来麻烦。代码基本上如下所示:“如果有一个中间点 j,这使得从 i 到 k 的路径更短,则将路径从 i 到 k 更改为通过 k”。因此,使用“0”表示“无链接”可能会使您的代码选择错误的“via”。尝试使用无穷大(如果您使用浮点数)或一个非常大的值(例如,MAX_INT)。

其次,这些行看起来不对:

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

由于您找到了从 i 到 k via j 的路径较短,它应该是:

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