Javaでグラフを扱うライブラリーであるJGraphTのメモ。
JGraphTはJavaでグラフを扱うライブラリー。
ここでいう「グラフ」はグラフ理論のグラフであって、棒グラフや円グラフ等のグラフではない。
頂点(vertex)同士を辺(edge)で結んだもの。フローチャートやER図みたいな感じのやつ。
DAG(有向非巡回グラフ)が有名。→DirectedAcyclicGraphクラス
JGraphTはMavenリポジトリーから取得できる。
plugins {
id 'java'
id 'eclipse'
}
java {
sourceCompatibility = JavaVersion.VERSION_18
targetCompatibility = JavaVersion.VERSION_18
}
compileJava {
options.encoding = 'UTF-8'
}
compileTestJava {
options.encoding = 'UTF-8'
}
repositories {
mavenCentral()
}
dependencies {
// https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
implementation group: 'org.jgrapht', name: 'jgrapht-core', version: '1.5.1'
implementation group: 'org.jgrapht', name: 'jgrapht-io', version: '1.5.1'
}
基本となるのがjgrapht-core。
Graphvizのdotファイルを出力したい(DOTExporterを使いたい)ような場合はjgrapht-ioも入れる。
JGraphTでは、グラフをGraphインターフェースの具象クラスで扱う。
import org.jgrapht.Graph; import org.jgrapht.graph.DefaultEdge;
Graph(の具象クラス)は型引数が<V, E>で、頂点(vertex)を扱うクラスと辺(edge)を扱うクラスが指定できる。
頂点はユーザーによって色々なクラスを使うが(単純な例ならStringとか)、辺は基本的にDefaultEdgeクラスにしておけばよい。