protected void CalculateConnectedComponentMetrics
(
IGraph oGraph,
out Int32 iConnectedComponents,
out Int32 iSingleVertexConnectedComponents,
out Int32 iMaximumConnectedComponentVertices,
out Int32 iMaximumConnectedComponentEdges
)
{
Debug.Assert(oGraph != null);
ConnectedComponentCalculator oConnectedComponentCalculator =
new ConnectedComponentCalculator();
IList<LinkedList<IVertex>> oConnectedComponents =
oConnectedComponentCalculator.CalculateStronglyConnectedComponents(
oGraph, true);
iConnectedComponents = oConnectedComponents.Count;
iSingleVertexConnectedComponents = 0;
iMaximumConnectedComponentVertices = 0;
iMaximumConnectedComponentEdges = 0;
foreach (LinkedList<IVertex> oConnectedComponent in
oConnectedComponents)
{
Int32 iVertices = oConnectedComponent.Count;
if (iVertices == 1)
{
iSingleVertexConnectedComponents++;
}
iMaximumConnectedComponentVertices = Math.Max(
iMaximumConnectedComponentVertices, iVertices);
iMaximumConnectedComponentEdges = Math.Max(
iMaximumConnectedComponentEdges,
CountUniqueEdges(oConnectedComponent));
}
}