public int Colorize() {
        /*для каждого узла устанавливаем */
        for (Node node : nodes.values()) {
            /*нулевой номер компоненты*/
            node.SetComponentNumber(0);
            /*узел не просмотрен*/
            node.SetVisited(false);
        }
        /*текущий номер компоненты*/
        int currentColor = 1;
        /*очередь узлов на обработку*/
        Queue<Node> queue = new LinkedList<Node>();
        int term;
        /*для каждого узла из графа*/
        for (Node node : nodes.values()) {
            /*если он ещё не обработан*/
            if (!node.IsVisited()) {
                /*красим*/
                node.SetComponentNumber(currentColor);

                if (!connectComponents.containsKey(currentColor))
                    connectComponents.put(currentColor, 1);
                else{
                term = connectComponents.get(currentColor);
                connectComponents.put(currentColor, term + 1);
                }

                currentColor++;
                /*помещаем в очередь*/
                queue.add(node);

            }
            /*пока очередь не пуста*/
            while (!queue.isEmpty()) {
                /*достаём из очереди узел*/
                Node current = queue.poll();
                /*помечаем как обработанный*/
                current.SetVisited(true);
                /*раскрашиваем смежные с ним узлы*/
                List<Node> linkedNodes = current.Colorize();
                term = connectComponents.get(currentColor-1);
                connectComponents.put(currentColor-1, term + linkedNodes.size());
                /*помещаем их в очередь*/
                queue.addAll(linkedNodes);
            }
            term =connectComponents.get(currentColor-1);
            if(term>maxNumberInComponent)
            {
                maxNumberInComponent = term;
                maxComp = currentColor - 1;
            }
                if(term<minNumberInComponent)
                minNumberInComponent = term;

        }

        numberOfComponents = currentColor - 1;
        return numberOfComponents;
    }