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.
Although powerful, JGraphT is designed to be simple and type-safe (via Java 5 generics). For example, graph vertices can be of any objects. You can create graphs based on: Strings, URLs, XML documents, etc; you can even create graphs of graphs! This code example shows how.
Other features offered by JGraphT:
graph visualization using the JGraph library (try this demo!)
complete source code included, under the terms of the GNU Lesser General Public License.
comprehensive Javadocs.
easy extensibility.
License: GNU LGPL.
Tags: discrete mathematics, graph theory, library.
Interface: library.
Source language: Java.
Supported language: Java.
Maintainer: Barak Naveh.
Homepage: http://jgrapht.sourceforge.net/.
Source repository: http://sourceforge.net/svn/?group_id=86459.
Bug database: http://sourceforge.net/tracker/?group_id=86459.
Announcements: https://lists.sourceforge.net/lists/listinfo/jgrapht-announce.
Support: http://lists.sourceforge.net/mailman/listinfo/jgrapht-users.
Development: https://lists.sourceforge.net/lists/listinfo/jgrapht-developers.