Algorithms are usually composed of visitor who trigger events, and observers who listen to a subset of those events. Events allow to hook to a subset of the events and also to dispatch the events to multiple observers easily.
The idea of observers comes from the Boost Graph Library. For example, the breath first search algorithm can be reused to solve different problems by using different observersers.
- db persistence:
No particular reason. Database schemas are usually highly application specific, so each user should simply write its own.
- large graph
QuickGraph was not designed to deal with extremely large graphs. You need to use io-efficient libraries such as STLXX to deal with those. Otherwise, try sticking to int as vertices and SEquatableEdge<int> in order to avoid bloating your heap.