Clusterizator.Krab.KrabClusterization.ChooseDivision C# (CSharp) Метод

ChooseDivision() приватный Метод

Recursive method for finding optimal division of graph into clusters (groups).
private ChooseDivision ( int clusters, int position, GraphManager currentManager ) : void
clusters int /// Clusters left to separate. ///
position int /// Starting position for iteration. ///
currentManager GraphManager /// Graph and its manager. ///
Результат void
        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;
                }
            }
        }