private static void Main()
        {
            #region Initialize

            var random = new Random();

            var generator = new DeBruijnGraphGenerator(2, 3);

            var graph = generator.Generate();
            for (var i = 0; i < graph.Edges.Count; i++)
            {
                for (var j = 0; j < graph.Edges[i].Count; j++)
                {
                    if (graph.Edges[i][j] == Graph.Infinity)
                    {
                        Console.Write("I");
                    }
                    else
                    {
                        Console.Write(graph.Edges[i][j]);
                    }
                }

                Console.WriteLine();
            }
            Console.WriteLine(graph.Edges.Count);
            Console.WriteLine(graph.Degree);

            // return;
            // var graph = new Graph();
            graph.Randomize(random);

            var chromosomes = new List <Chromosome>();
            for (var i = 0; i < ChromosomesNumber; i++)
            {
                var chromosome = new Chromosome();
                foreach (List <int> _ in graph.Edges)
                {
                    int vertex;
                    do
                    {
                        vertex = random.Next(graph.Edges.Count);
                    } while (chromosome.Vertices.Contains(vertex));

                    chromosome.Vertices.Add(vertex);
                }

                chromosomes.Add(chromosome);
            }

            #endregion

            #region Functions

            var fitnessFunction = new Func <Chromosome, double>(c =>
            {
                var sum = 0;
                for (var i = 0; i < c.Vertices.Count - 1; i++)
                {
                    sum += graph.Edges[c.Vertices[i]][c.Vertices[i + 1]];
                }

                return(sum + graph.Edges[c.Vertices[^ 1]][0]);
        private static void Main()
        {
            #region Initialize

            var random    = new Random();
            var generator = new GraphGenerator(random);
            var algorithm = new Algorithm <Chromosome>(random);

            #endregion

            var results = new List <List <List <AlgorithmResult <Chromosome> > > >();
            for (int verticesNumber = VerticesNumberFrom; verticesNumber <= VerticesNumberTo; verticesNumber++)
            {
                Console.WriteLine($"{verticesNumber} vertices");
                results.Add(new List <List <AlgorithmResult <Chromosome> > >());
                for (int degree = DegreeFrom; degree <= verticesNumber; degree++)
                {
                    results[verticesNumber - VerticesNumberFrom].Add(new List <AlgorithmResult <Chromosome> >());
                    for (int chromosomesNumber = ChromosomesNumberFrom; chromosomesNumber <= ChromosomesNumberTo; chromosomesNumber++)
                    {
                        var averageIterationsOrder  = 0;
                        var averagePathOrder        = 0;
                        var averageIterationsCycle  = 0;
                        var averagePathCycle        = 0;
                        var averageIterationsRandom = 0;
                        var averagePathRandom       = 0;
                        var averageIterations       = 0;
                        var averagePath             = 0;
                        for (var graphCase = 0; graphCase < GraphsNumber; graphCase++)
                        {
                            Graph graph = generator.Generate(verticesNumber, degree);
                            graph.Randomize(random);

                            #region Chromosomes

                            var chromosomes = new List <Chromosome>();
                            for (var i = 0; i < chromosomesNumber; i++)
                            {
                                var chromosome = new Chromosome();
                                foreach (List <int> _ in graph.Edges)
                                {
                                    int vertex;
                                    do
                                    {
                                        vertex = random.Next(graph.Edges.Count);
                                    } while (chromosome.Vertices.Contains(vertex));

                                    chromosome.Vertices.Add(vertex);
                                }

                                chromosomes.Add(chromosome);
                            }

                            #endregion

                            #region Functions

                            var fitnessFunction = new Func <Chromosome, double>(c =>
                            {
                                var sum = 0;
                                for (var i = 0; i < c.Vertices.Count - 1; i++)
                                {
                                    sum += graph.Edges[c.Vertices[i]][c.Vertices[i + 1]];
                                }

                                return(sum + graph.Edges[c.Vertices[^ 1]][0]);