for(int k = 0; k<4; k++){
if(p.getMincost(k)+minDistance[p.getSource()] < distanceTable[k][p.getSource()]){
distanceTable[k][p.getSource()] = p.getMincost(k)+minDistance[p.getSource()];
if(distanceTable[k][p.getSource()]<minDistance[k]){
minDistance[k] = distanceTable[k][p.getSource()];
send = true;
}
}
}
简单模拟拥有四个实体的路由网络中:distanceTable[i][j] 表示通过 i 到 j 的距离,在一个实体收到报文类(p)通知时需要更新它。实际上需要更新该实体已知的每一个网络节点到通知发出节点的距离信息以便之后的寻路操作仍是得出最优距离。因此for循环从0开始遍历(总共拥有0,1,2,3四个实体),p.getMincost得到邻居实体到达需更新目标实体的距离,加上本实体到达邻居实体的距离,求和得到路径长度作比较得到最小值更新minDistance。
需要注意的是,distanceTable[a][a] 表示该实体到实体a的距离,但distanceTable[i][j]则不同,如果实体i收到j的包更新distanceTable[i][j],实际计算的是从j出来的信息通过i再返回j的开销,因此要与原始的distanceTable[i][j]作比较,只有小于才可以更新。