Мы разработали небольшую библиотеку графов для проекта аппарата. Вы можете посмотреть его здесь . Это не чисто функциональный и не простой график, но он нам очень помогает. Вы также получаете изменяемые и неизменяемые графы.
Вот простой пример создания графа:
implicit val factory = DefaultEdge[String](_, _)
val G = Graph(
"Entry" -> "A",
"A" -> "B",
"B" -> "C",
"B" -> "D",
"D" -> "F",
"F" -> "E",
"E" -> "F",
"E" -> "C",
"C" -> "A",
"C" -> "Exit")
G.dotExport to Console.out
Поиск SCC и подкомпонентов
G.sccs foreach println
G.sccs map { _.entry } foreach println
G.sccs filter { _.canSearch } map { _.subcomponents } foreach { _ foreach println }
Обход
for(x <- G.topsort) println(x)
for(x <- G.dft(y)) println(x)
Текущий недостаток заключается в том, что библиотека поддерживает только инвариантные типы, а не полную функциональность для всей библиотеки графов.