我有一个带有一些节点和链接的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()的距离?提前谢谢!答案 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()会更新距离。