与えられたノードのすべての親を印刷する方法。グラフ内の階層頂点を印刷する
1
A
答えて
1
ここでは、トラバースしたいブランチと一致すると思われるサンプルグラフを示します。
graph=TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
g=graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
v1 = graph.addVertex(T.label, "vtx", T.id, 1, "name", "alpha")
==>v[1]
v2 = graph.addVertex(T.label, "vtx", T.id, 2, "name", "beta")
==>v[2]
v3 = graph.addVertex(T.label, "vtx", T.id, 3, "name", "gamma")
==>v[3]
v4 = graph.addVertex(T.label, "vtx", T.id, 4, "name", "delta")
==>v[4]
v5 = graph.addVertex(T.label, "vtx", T.id, 5, "name", "epsilon")
==>v[5]
v5.addEdge("parent", v4, T.id, 101)
==>e[101][5-parent->4]
v4.addEdge("parent", v3, T.id, 102)
==>e[102][4-parent->3]
v3.addEdge("parent", v2, T.id, 103)
==>e[103][3-parent->2]
v2.addEdge("parent", v1, T.id, 104)
==>e[104][2-parent->1]
アウトバウンドの '親'エッジを受け取るrepeat()ループは、階層を '上に'移動します。次の例では、我々は「ホップ」[5] vで開始し、2を取るためにそれを言った:実際には
g.V(5).repeat(out('parent')).times(2).path()
==>[v[5],v[4],v[3]]
あなたはおそらく(繰り返しIE)トラバース維持したいあなたは、いくつかの終了条件を打つまであなたが達成したいことに依存します。
特定の頂点で停止したいと思うかもしれません。あなたが知っていれば、階層のルートは、[1] Vである、または特定のプロパティを持っている:
g.V(5).repeat(out('parent')).until(hasId(1)).path()
==>[v[5],v[4],v[3],v[2],v[1]]
それとも、階層の最上位にヒットするまで、それ以上の発信エッジが存在しなくなるまで、あなたが(すなわちトラバースすることをお勧めします):
g.V(5).repeat(out('parent')).until(outE().count().is(0)).path()
==>[v[5],v[4],v[3],v[2],v[1]]
遠いリーフノードへのルートからの最大深さを得るために:
あなたのグラフを一致させるために、のグラフにいくつかのより多くの頂点を追加してみましょう。
v7 = graph.addVertex(T.label, "vtx", T.id, 7, "name", "eta")
==>v[7]
v8 = graph.addVertex(T.label, "vtx", T.id, 8, "name", "theta")
==>v[8]
v6 = graph.addVertex(T.label, "vtx", T.id, 6, "name", "zeta")
==>v[6]
v8.addEdge("parent", v7, T.id, 105)
==>e[105][8-parent->7]
v7.addEdge("parent", v2, T.id, 106)
==>e[106][7-parent->2]
v6.addEdge("parent", v3, T.id, 107)
==>e[107][6-parent->3]
葉の頂点に向けてルートからトラバーサルは今3つのパスになります:
g.V(1).repeat(__.in('parent')).until(inE().count().is(0)).path()
==>[v[1],v[2],v[3],v[6]]
==>[v[1],v[2],v[7],v[8]]
==>[v[1],v[2],v[3],v[4],v[5]]
をしかし、あなたは唯一の最長パスの長さが欲しい:
g.V(1).repeat(__.in('parent')).until(inE().count().is(0)).path().
......1> tail(1).unfold().count()
==>5
願って助けてください、 グラハム
3
グラハムの答えは大丈夫ですが、 h計算には必要ではありません。
これは私があなたのグラフを設定している方法です:
今g = TinkerGraph.open().traversal()
g.addV().property(id, 1).as("v1").
addV().property(id, 2).as("v2").
addV().property(id, 3).as("v3").
addV().property(id, 4).as("v4").
addV().property(id, 5).as("v5").
addV().property(id, 6).as("v6").
addV().property(id, 7).as("v7").
addV().property(id, 8).as("v8").
addE("black").from("v2").to("v1").
addE("black").from("v7").to("v2").
addE("black").from("v8").to("v7").
addE("orange").from("v8").to("v7").
addE("black").from("v3").to("v2").
addE("black").from("v6").to("v3").
addE("black").from("v4").to("v3").
addE("black").from("v5").to("v4").
addE("orange").from("v5").to("v4").iterate()
、すべての祖先を取得するには、あなたが必要なのはこれです:
gremlin> g.V(5).repeat(out().dedup()).emit()
==>v[4]
==>v[3]
==>v[2]
==>v[1]
同様にあなたは、パス計算を必要としません最大深度を決定する:
gremlin> g.V(5).emit().repeat(out().dedup()).count()
==>5
関連する問題
- 1. ヘッダー階層を印刷する
- 2. グラフ - すでに2つの頂点間のパスを印刷する方法
- 3. 従業員の階層ツリーを印刷する方法
- 4. 階層/マルチレベル円グラフ
- 5. グラフG.グラフから頂点から頂点8 7
- 6. デバイス上にビュー階層を印刷します
- 7. 階層グラフ接続のメトリック
- 8. グラフの頂点数のシーケンス
- 9. グラフの頂点をリンクする
- 10. OCamlはグラフの頂点モジュール
- 11. グラフ内の頂点のセットを分離する
- 12. グラフ内に1つの頂点しかないグラフ
- 13. グラフの頂点のカバー - 同程度の頂点の混乱
- 14. 頂点ラベルでグラフを分割する
- 15. サブカテゴリの子カテゴリを階層的な順序で印刷する方法
- 16. SQL内の階層
- 17. サイト内の階層
- 18. テーブルデータベース内の階層
- 19. oetl.shの間に作成された頂点のRIdを印刷する
- 20. Rグラフ:列の内容による色の頂点
- 21. ローカルDynamodbのgremlinグラフ内に複数の頂点を作成
- 22. 点字印刷
- 23. Wordpressのループでタクソノミー階層の最も内側のタクソノミを印刷するには?
- 24. 頂点の頂点を頂点で4.2で検証する
- 25. 階層内のファイルをリダイレクト
- 26. 有向グラフ内のある頂点から別の頂点への最短経路
- 27. DSEグラフは2つの頂点ラベルの同じ頂点部分ですか?
- 28. 表示グーグルアースで目印の階層
- 29. パイソン - グラフを実装し、エッジと頂点
- 30. 私が次のグラフ持つ頂点