簡體   English   中英

如何使用gremlin查找加權邊緣范圍內的所有節點?

[英]How to find all nodes within a range of weighted edges with gremlin?

我正在嘗試獲取從給定的起始節點到給定范圍內的所有節點的最短路徑的列表。 每個邊緣都經過加權,我正在嘗試使用這些權重的總和作為范圍,而不是步驟數。

以下內容適用於限制步驟,但我不確定如何正確匯總和限制路徑邊緣權重或返回路徑。

g.v(1).out.loop(1){it.loops < 3}{true}.dedup

謝謝你的幫助!

TinkerPop 3語法可能如下所示:

g.withSack(0.0f).V(1).repeat(outE()。sack(sum,'weight')。inV())。times(2).sack()。path()

輸出包括邊緣在內的完整路徑以及邊緣的總權重:

==> [v [4256],e [178-3a8-1lh-374] [4256-onetwo-> 4144],v [4144],e [16u-374-36d-3a0] [4144-twothree-> 4248 ],v [4248],3.0]

循環步驟的it.path屬性是關鍵。 由於權重在邊緣,因此我們需要顯式遍歷它們,以便它們在路徑中可見:

g.v(1).as("start").outE().inV().loop("start"){it.path.collect{it.weight==null ? 0.0 : it.weight}}.sum()<=0.3f}.dedup()

如果要同時遍歷出入邊緣,則需要添加simplePath()來防止遍歷自身。

g.v(1).as("start").bothE().bothV().loop("start"){it.path.collect{it.weight==null ? 0.0 : it.weight}}.sum()<=0.3f}.simplePath().dedup()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM