Найти прямых и косвенных наследников узла (scala-graph) - PullRequest
0 голосов
/ 05 февраля 2019

В графе scala метод diSuccessors позволяет найти прямых наследников узла.Например:

import scalax.collection.mutable.Graph
import scalax.collection.GraphPredef._, scalax.collection.GraphEdge._

val g = Graph(0~>1, 1~>4, 1~>2,2~>3)

g.get(1).diSuccessors //return Set(2, 4): scala.collection.immutable.Set

Но моя проблема состоит в том, чтобы найти всех преемников, которые прямо или косвенно связаны с узлом.В моем примере у меня было бы:

import scalax.collection.mutable.Graph
import scalax.collection.GraphPredef._, scalax.collection.GraphEdge._

val g = Graph(0~>1, 1~>4, 1~>2,2~>3)

g.get(1).AllSuccessors //return Set(2, 4, 3): scala.collection.immutable.Set

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете получить AllSuccessors, создав подграф (метод withSubgraphs) и удалив из него свой узел.

  import scalax.collection.mutable.Graph
  import scalax.collection.GraphPredef._

  val graph = Graph(0 ~> 1, 1 ~> 4, 1 ~> 2, 2 ~> 3)
  val node = graph.get(1)

  val subgraph  = node.withSubgraph().toSet      //Set(1, 2, 4, 3)
  val allSuccessors = subgraph - node            //Set(4, 2, 3)
...