我正在尝试使用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 ,但没有用。
我是否正确执行...... ???
答案 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;