考虑到边缘上的权重属性,我试图找到最短路径,我的工作是在 TinkerGraph 上,我想在 java 中完成。
gremlin 对我不是很有帮助
g.V().has(id1).
repeat(both().simplePath()).
until(has(id2)).as("path").
map(unfold().coalesce(values("weight"),
constant(0)).
sum()).as("cost").
select("cost","path").next().get("path");
这给了我最短路径,而不考虑边缘的权重属性。
编辑:我的例子:
边缘插入:
源,目标
b1,b2
b1,b2
b1,b2
b1,b2
b1,b3
b3,b2
private void add(Vertex source,Vertex target){
if(!checkEdgeExist(graph,source,target))
source.addEdge(target).property(WEIGHT,1.0);
else {
Edge e = getEdgeBetweenTwoVertices(graph,source,target);
source.edges(Direction.OUT).forEachRemaining(edge -> {
if(edge.inVertex().equals(target))
edge.property(WEIGHT,(double)e.property(WEIGHT).value()+1);
});
private static boolean checkEdgeExist(TinkerGraph graph,Vertex source,Vertex target){
return graph.traversal().V(source).outE().filter(p -> p.get().inVertex().equals(target)).hasNext();
}
换句话说,边缘的权重会根据边缘的频率更新,例如,如果 b1,b2 出现 4 次,则边缘的权重为 4。现在我希望 Dijkstra 返回权重方面的最短路径,而不是边缘最短。路径(b1,b2) = b1->b3->b2