在Jgrapht中的GraphPath中插入一个顶点

时间:2018-10-30 06:06:17

标签: jgrapht

如何通过使用JgraphT扩展图形中现有的path,例如在获得两个顶点之间的最短路径之后,如何通过在组成路径的顶点之间插入一个相邻节点来扩展它?假设我的路径看起来像下面指定的路径:

Before Insertion
    VertexList:-> [1, 29, 191, 189, 126, 243, 197]
    EdgeList:-> [((1) : (29)), ((29) : (191)), ((191) : (189)), ((189) : (126)), ((126) : (243)), ((243) : (197))]
    Adjacent vertex to vertex 191 -> 44


After Insertion 
 VertexList:-> [1, 29, 191, 44, 189, 126, 243, 197]
 EdgeList:-> [((1) : (29)), ((29) : (191)), ((191) : (44)), ((44) : (189)), ((189) : (126)), ((126) : (243)), ((243) : (197))]

1 个答案:

答案 0 :(得分:1)

当前,尚无直接方法在现有GraphPath中插入顶点。完成所需操作的最简单方法是创建一个新的GraphPath

//Get your shortest path
GraphPath<V,E> p1= ...;

//Copy the vertex list and insert your vertex in the desired position
List<V> vertexList=new ArrayList<>(p1.getVertexList());
vertexList.insert(position,vertex);

//Create a new GraphPath from the new vertex list
GraphPath<V,E> p2= new GraphWalk<>(graph, vertexList, weight);

如果图形是简单图形,则上述过程通常效果很好。当图形是多图或伪图时,必须格外小心!在多图中,相同顶点之间可以有多个边。多重图形中的路径必须以其边缘而不是顶点序列来表示。例如。当顶点[a,b,c,d]b之间有多个边时,以顶点表示的路径c定义不明确。因此,在使用多图的情况下,必须通过修改路径的edgeList来执行顶点插入(请参见GraphPath.getEdgeList()