如何正确使用DijkstraDistance重置

时间:2014-05-18 02:02:32

标签: java jung

我有一个带有一些节点和链接的UndirectedSparseGraph g,然后我选择最短路径并计算一个函数:

alg = new DijkstraDistance<Long, String>(g);
// 
alg.enableCaching(false);
// 
for(Node n:g.getVertices()){
    for(Node m:g.getVertices(){
         findAValue(alg.getDistance(n, m));
    }
}

然后我通过添加边缘或删除一条边来更新图形,如:

g.addEdge(id, n, m, EdgeType.UNDIRECTED);

我现在应该做些什么才能再次计算距离?我应该输入:

alg = new DijkstraDistance<Long, String>(Hummon.g);

或者我应该做得更好:

alg.reset();
alg = new DijkstraDistance<Long, String>(Hummon.g);

我必须通过在图表中添加删除边来计算距离的很多倍,所以我真的希望使用最有效的方法。

顺便说一句:是否有类似.update()的距离?提前谢谢!

1 个答案:

答案 0 :(得分:0)

根据@Erwin Bolwidt的建议,我用这段代码测试了.reset():

 g = new UndirectedSparseGraph<Long, String>();
    // add some vertices
    for(long i=0;i<5;i++){
        g.addVertex(i);
    }
    // add some edges
    g.addEdge("0-1", 0l, 1l, EdgeType.UNDIRECTED);
    g.addEdge("0-2", 0l, 2l, EdgeType.UNDIRECTED);
    g.addEdge("1-3", 1l, 3l, EdgeType.UNDIRECTED);
    g.addEdge("3-4", 3l, 4l, EdgeType.UNDIRECTED);
    alg = new DijkstraDistance<Long, String>(g);
    for(Long n:g.getVertices()){
        for(Long m:g.getVertices()){
            System.out.println(n+"-"+m+" dist "+alg.getDistance(n, m));
        }
    }
    System.out.println("TOPA\n\n\n");
    g.addEdge("2-4", 2l, 4l, EdgeType.UNDIRECTED);
    alg.reset(2l);
    for(Long n:g.getVertices()){
        for(Long m:g.getVertices()){
            System.out.println(n+"-"+m+" dist "+alg.getDistance(n, m));
        }
    }

很容易看出.reset()会更新距离。