Поиск всех путей между исходной и целевой вершинами в Graphx — Scala

Я хочу получить все вершины и ребра между двумя заданными вершинами (исходной и конечной) в Graphx. Итак, я думаю о том, чтобы найти все пути между двумя вершинами, а затем удалить повторяющиеся ребра.

вот код кратчайшего пути, по которому я перехожу по этой ссылке:

/**

* Returns the shortest directed-edge path from src to dst in the graph. If no path exists, returns
* the empty list.
*/

def bfs[VD, ED](graph: Graph[VD, ED], src: VertexId, dst: VertexId): Seq   [VertexId] = {
 if (src == dst) return List(src)

 // The attribute of each vertex is (dist from src, id of vertex with dist-1)
 var g: Graph[(Int, VertexId), ED] =
   graph.mapVertices((id, _) => (if (id == src) 0 else Int.MaxValue, 0L)).cache()

 // Traverse forward from src
 var dstAttr = (Int.MaxValue, 0L)
 while (dstAttr._1 == Int.MaxValue) {
   val msgs = g.aggregateMessages[(Int, VertexId)](
     e => if (e.srcAttr._1 != Int.MaxValue && e.srcAttr._1 + 1 < e.dstAttr._1) {
      e.sendToDst((e.srcAttr._1 + 1, e.srcId))
     },
     (a, b) => if (a._1 < b._1) a else b).cache()

   if (msgs.count == 0) return List.empty

   g = g.ops.joinVertices(msgs) {
    (id, oldAttr, newAttr) =>
     if (newAttr._1 < oldAttr._1) newAttr else oldAttr
   }.cache()

   dstAttr = g.vertices.filter(_._1 == dst).first()._2
 }

 // Traverse backward from dst and collect the path
 var path: List[VertexId] = dstAttr._2 :: dst :: Nil
 while (path.head != src) {
   path = g.vertices.filter(_._1 == path.head).first()._2._2 :: path
 }
 path
}

Я пытаюсь изменить его, чтобы получить все пути, а не только самый короткий. Я могу получить только самый большой или самый короткий путь. Как я могу получить список списков, содержащих все пути?


person Nargis    schedule 02.04.2018    source источник
comment
Если вам может помочь пример Java, см. (здесь) [stackoverflow.com/a/48718818/3992939]   -  person c0der    schedule 06.04.2018
comment
спасибо @c0der, я понял. Я нахожу кратчайший путь, затем отключаю этот путь, а затем нахожу следующий. Пока не останется пути.   -  person Nargis    schedule 06.04.2018