远程矢量的实现没有找到新的路径

时间:2013-05-06 01:00:13

标签: java

我正在尝试从文本文件中实现距离矢量路由协议,并且遇到了障碍,因为我的算法没有找到节点之间的新连接。我的节点结构是

public class Node {

    int name;

    public int[][] connections, via;


    Node(int iName, int size) {
        name = iName;
        connections = new int[size][size];
        via = new int[size][size];
    }

}

我的搜索算法是

for(int i = 0; i < size; i++){
    for(int j = 0; j<size; j++){

        if(node.connections[i][j]!=MAX){

            for(int k = 0; k < size; k++){
                if((node.connections[i][j]+node.connections[j][k])<node.connections[i][k]&&(node.connections[i][j]+node.connections[j][k])>0){
                     node.connections[i][k] = node.connections[i][j] + node.connections[j][k];
                     node.via[i][k] = j;
                     node.via[k][i] = j;
                }
            }
        }
    }
}

如果我玩这些参数,我可以让它来跟踪节点之间的连接,但只能跟踪那些最初定义连接的连接。

1 个答案:

答案 0 :(得分:0)

有关Floyd-Warshall算法,请参阅此link。订单应该像网站上的伪代码一样:

for k from 1 to |V|
    for i from 1 to |V|
      for j from 1 to |V|
         if dist[i][k] + dist[k][j] < dist[i][j] then
         dist[i][j] ← dist[i][k] + dist[k][j]

修改 基于上面的伪代码,代码应如下所示:

for(int k = 0; k < size; i++){
    for(int i = 0; j<size; j++){
        for(int j = 0; j < size; j++){
            if((node.connections[i][k]+node.connections[k][j])<node.connections[i][j]
                &&(node.connections[i][k]+node.connections[k][j])>0){
                node.connections[i][j] = node.connections[i][k] + node.connections[k][j];
                node.via[i][j] = k;
            }
        }
    }
}

循环的顺序很重要,因为循环体的行为会有所不同。第一步是选择路径的大小(k + 1是我们正在优化的路径的大小,从大小为1的路径开始)。第二步是选择一个起始节点。第三步是选择一个终端节点。然后,算法找到从起始节点到另一节点的大小为1的最短路径。第二个循环遍历所有起始节点以找到大小为1的所有最佳路径。然后,增加大小以找到大小为2的所有最佳路径,从最佳路径大小为1构建。这一直持续到甚至考虑使用图中所有节点的路径。