[英]Gremlin Groovy Java Finding shortest Path + basic connectivity
我有一個Java應用程序,從其中我要調用groovy類來計算圖形中2個頂點之間的最短路徑。
Java:
public class Test {
public static void main(String[] args) {
TinkerGraph g = new TinkerGraph();
Vertex src = null;
src = g.addVertex(null);
src.setProperty("name",1);
src.setProperty("Type", "switch");
Vertex src1 = null;
src1 = g.addVertex(null);
src1.setProperty("name",2);
src1.setProperty("Type", "switch");
Vertex src2 = null;
src2 = g.addVertex(null);
src2.setProperty("name",3);
src2.setProperty("Type", "switch");
Vertex src3 = null;
src3 = g.addVertex(null);
src3.setProperty("name",4);
src3.setProperty("Type", "switch");
Edge e=null;
e=g.addEdge(null, src, src1, "connects");
Edge e1=null;
e1= g.addEdge(null, src1, src2, "connects");
Edge e2=null;
e2= g.addEdge(null, src2, src3, "connects");
System.out.println(GetRoute.getPathToHost(g));
}
}
Groovy:
class GetRoute {
static {
Gremlin.load()
}
public static Map<Vertex, Integer> getPathToHost(TinkerGraph g) {
g1.V[["name":1]].both.loop(2){!it.object.equals("name":4)}.Paths >> 1
}
}
我的問題是:
首先查詢是錯誤的。 我已經在gremlinpipe + java中計算了一個函數,但是它非常龐大,我試圖通過groovy找到一種更簡單的方法。 如何優化此查詢?
假設我的查詢在2個頂點之間的路徑中打印了所有頂點,然后如何將其存儲在讓我們說的Map數組中,或者如何將其打印到控制台上?
任何幫助將不勝感激。
問候
這是我的Gremlin會議:
gremlin> g = new TinkerGraph()
==>tinkergraph[vertices:0 edges:0]
gremlin> src = g.addVertex(null)
==>v[0]
gremlin> src.setProperty("name",1)
==>null
gremlin> src.setProperty("Type", "switch")
==>null
gremlin> src1 = g.addVertex(null)
==>v[1]
gremlin> src1.setProperty("name",2)
==>null
gremlin> src1.setProperty("Type", "switch")
==>null
gremlin> src2 = g.addVertex(null)
==>v[2]
gremlin> src2.setProperty("name",3)
==>null
gremlin> src2.setProperty("Type", "switch")
==>null
gremlin> src3 = g.addVertex(null)
==>v[3]
gremlin> src3.setProperty("name",4)
==>null
gremlin> src3.setProperty("Type", "switch")
==>null
gremlin> e=g.addEdge(null, src, src1, "connects")
==>e[4][0-connects->1]
gremlin> e1= g.addEdge(null, src1, src2, "connects")
==>e[5][1-connects->2]
gremlin> e2= g.addEdge(null, src2, src3, "connects")
==>e[6][2-connects->3]
gremlin> g.V.has('name',1).out.loop(1){it.object.name != 4 && it.loops < 5}{true}.path.filter{it.last().name == 4}
==>[v[0], v[1], v[2], v[3]]
那里的最后一行計算了1到4之間的路徑。您可以在gremlindocs中閱讀有關Gremlin的最短路徑計算的更多信息: http ://gremlindocs.com/#recipes/shortest-path(請原諒格式...一些dns問題正在困擾atm)
我不確定您想要的Map
如何。 List格式對我來說似乎很適合使用路徑,但是我想如果您希望將其鍵入到路徑的第一個頂點,我想您可以發布另一個轉換:
gremlin> g.V.has('name',1).out.loop(1){it.object.name != 4 && it.loops < 5}{true}.path.filter{it.last().name == 4}.transform{[(it.first()):it]}
==>{v[0]=[v[0], v[1], v[2], v[3]]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.