I'm currently working on a research project that makes use of proprietary software. I'm trying to replace the proprietary C libraries for graph representation. Doing this will make it easier to migrate our project to an open platform and make it available to everyone for free.
The project mixes C with C++, so if it's a C library we are going to adopt, it needs to play along nicely with C++.
It makes it fairly easy to:
- add and remove vertices
- add and remove edges
- get a list with the edges of a vertex
- get a list with the neighbors of a node
- calculate connected components
- calculate shortest paths (using Dijkstra)
Vertices have type
PrgT_Graph_Vertex* and can have an associated
void* pointer to store related information. A similar logic is used with respect to edges. Here's a concrete example.
The replacement needs to have a license that does not enforce copyleft, so it can't be GPL. BSD-style licenses are fine.
Boost Graph Library, BGL from now on, has an OK license and is part of a well-known suite. However, its documentation is fragmentary and looks like it was "patched up" together rather than thoughtfully "built". Removing vertices does not seem to be easy as it can mess with vertex indexes.
Network Graph Toolkit, developed by the NIST, is released in the public domain but does not look like it's documented at all (aside from code comments).
BGL seems to be the one with the best guarantees it will remain actively developed. But it's also quite far from my current implementation logic and will take a lot of time just to get started with.