Bunun birkaç kez sorulduğunu biliyorum, ancak Tinkerpop'un (3.1) son sürümü hakkında herhangi bir referans bulamadık. bizim geçişlerimiz.İki düğüm arasında en kısa yolu bulmanın en iyi yolu Tinkerpop 3.1
n nodları 3 ve 4 arasındaki en kısa yolu bulmam gerektiğini varsayalım. Bu traversal ses mi? İşte
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().limit(1)
Ben BFS arama döngü olduğumda yürütülür varsayarak yaşıyorum
it seems that this was the case with the loop()
function olarak (böylece, ilk sonuç kısa yol).
Ayrıca, until
adımında önceden bağlanmış bir değişkeni (as
adımını kullanarak) dahil etmenin herhangi bir yolu var mı? Bu kadar net değil önceki geçişi de görülebileceği olarak Daha doğrusu, ben, son olarak, örneğin, aralarında kısa yolu bulmak daha sonra
g.V().match(
__as('e0').out('Feedbacks').as('e1'),
__as('e0').repeat(out('Meets')).until(<I reach e1>).path().<get_length>.as('len')
).select('e0', 'e1', 'len')
çevirmesi esnasında iki düğüm seçmek için çalışıyorum ve bana en kısa yolun uzunluğunu nasıl alabilirim.
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().by(__size())
bir hata verir iken
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().size()
gibi kullanma şey, sonuç (satır sayısı iade) boyutunu verir.
İşte bir deneyeyim, biraz oynamak isterse. İlk yol her zaman en kısa yol olduğunu,
g.V(3).repeat(out().simplePath()).until(hasId(4)).path().limit(1)
Sizin varsayım doğrudur:
graph = TinkerGraph.open()
e0 = graph.addVertex(T.id, 0, label, "User", "name", "e0")
e1 = graph.addVertex(T.id, 1, label, "User", "name", "e1")
e2 = graph.addVertex(T.id, 2, label, "User", "name", "e2")
e3 = graph.addVertex(T.id, 3, label, "User", "name", "e3")
e4 = graph.addVertex(T.id, 4, label, "User", "name", "e4")
e0.addEdge("Feedbacks", e2)
e0.addEdge("Meets", e1)
e2.addEdge("Feedbacks", e4)
e2.addEdge("Meets", e4)
e3.addEdge("Feedbacks", e0)
e3.addEdge("Meets", e2)
e4.addEdge("Feedbacks", e0)
g = graph.traversal()
Teşekkürler @Daniel Kuppitz. Cevabını yazarken soruyu değiştirdim. Yeni isteği kontrol etmek için biraz zamanınız olacak, yani, 'till() 'adımındaki daha önce takma bir düğümle nasıl referans yapıyorum? – Alberto
Tekrar teşekkürler, Daniel – Alberto
Tekrar rahatsız ettiğim için özür dilerim. Şimdi iki sorudan oluşan sonuçları bir araya getirmeye çalışıyorum: 'Karşılaşılanlar' * doğrulanmamış * ('her ikisi ('Meets')') en kısa yolunu hesaplayarak Geri besleme kenarı tarafından bağlanan iki köprüyü bağlar.'('E0')' -'select ('e0') 'desenlerinden dolayı' simplePath() 'ı 'tekrarla' (' '' '' '' 'içinde kullanamadığımdan önemsiz değildir ve ilk yolu seçemiyorum. bir 'limit (1)' sonrası kadar() 'dır, aksi halde çözümleri kaybederim. Bununla nasıl başa çıkacağın hakkında bir fikrin var mı? – Alberto