距离路由矢量实现

时间:2012-08-22 13:38:07

标签: c++

我正在尝试使用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 ,但没有用。

我是否正确执行...... ???

1 个答案:

答案 0 :(得分:1)

有两件事让我烦恼你的代码。首先,您使用“0”来表示“无链接”。这可能会让你陷入困境。该代码基本上如下所示:“如果存在中间点j,则使得从i到k的路径更短,将路径从i更改为k以通过k”。因此,使用“0”表示“无链接”可能会使您的代码选择错误的“通过”。请尝试使用无穷大(如果使用浮点)或非常大的值(例如,MAX_INT)。

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

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

由于您发现从i到k经由j的路径较短,因此应该是:

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