JGraphT is a free Java graph library that provides mathematical graph-theory objects and algorithms. JGraphT supports various types of graphs including:
directed and undirected graphs.
graphs with weighted / unweighted / labeled or any user-defined edges.
various edge multiplicity options, including: simple-graphs , multigraphs , pseudographs.
unmodifiable graphs - allow modules to provide “read-only” access to internal graphs.
listenable graphs - allow external listeners to track modification events.
subgraphs graphs that are auto-updating subgraph views on other graphs.
all compositions of above graphs.