private void ChooseDivision(int clusters, int position, GraphManager currentManager)
{
// if recursive calls are required
if (clusters > 1)
{
for (int i = position; i < (manager.Connections.Count - clusters); i++)
{
// creatingcopy of graph to be able to disconnect pair of nodes (cut the link)
GraphManager tempManager = currentManager.Clone();
if (tempManager.Connections[i].Connected)
{
tempManager.Cut(tempManager.Connections[i]);
ChooseDivision(clusters - 1, i + 1, tempManager);
}
}
}
else
{
// calculating clusterization quality
double f = QualityCalculator.Calculate(currentManager, manager, powerWeight);
if (f > optimalF)
{
// saving optimal clusterization
optimalDivide = currentManager;
optimalF = f;
}
}
}