GraphStream 라이브러리를 사용하여 그래프에서 2 노드 사이의 최단 경로를 찾으려고했습니다. 마지막으로 경로의 가장자리를 인쇄 할 수 있지만 (it.foreach(println)
) 한 번에 한 요소에 액세스 할 수 없습니다.Scala 용 GraphStream 라이브러리 사용 방법
import org.graphstream.algorithm.Dijkstra;
import org.graphstream.graph.Edge;
import org.graphstream.graph.Graph;
import org.graphstream.graph.Node;
import org.graphstream.graph.Path;
import org.graphstream.graph.implementations.SingleGraph;
import scala.collection.JavaConverters._
object MainApp extends App{
def exampleGraph():Graph={
val g:Graph = new SingleGraph("example");
g.addNode("N1_S1");
g.addNode("N1_J1");
g.addNode("N1_H1");
g.addNode("N1_J2");
g.addNode("N1_H2");
g.addNode("N1_W1");
var e:Edge=g.addEdge("N1_S1-N1_J1", "N1_S1", "N1_J1")
e.addAttribute("length",Int.box(6))
e=g.addEdge("N1_J1-N1_H1", "N1_J1", "N1_H1")
e.addAttribute("length",Int.box(8))
e=g.addEdge("N1_J1-N1_J2", "N1_J1", "N1_J2")
e.addAttribute("length",Int.box(8))
e=g.addEdge("N1_J2-N1_H2", "N1_J2", "N1_H2")
e.addAttribute("length",Int.box(4))
e=g.addEdge("N1_J2-N1_W1", "N1_J2", "N1_W1")
e.addAttribute("length",Int.box(10))
return g
}
val g:Graph = exampleGraph();
g.display(false);
val dijkstra:Dijkstra = new Dijkstra(Dijkstra.Element.EDGE, null, "length");
dijkstra.init(g);
dijkstra.setSource(g.getNode("N1_S1"));
println(dijkstra.getPath(g.getNode("N1_W1")));
val myPath:Path=dijkstra.getPath(g.getNode("N1_W1"))
val it=(myPath.getEachEdge).asScala
println("edges")
it.foreach(println)
}
문제는 getEachEdge
의 프로토 타입이 getEachEdge[T <: Edge](): Iterable[_ <: T]
및 asScala
리턴한다 Iterable[_ <: Nothing]
점이다 :이 코드입니다. 마지막 질문은 "어떻게 최단 경로의 각 요소에 액세스 할 수 있습니까?"입니다.
사용중인 스칼라 버전 다음
는ClassCastException를 슬로우? –