Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Ждать помощи?
Не помогу 1 33.33%
Помогу 1 33.33%
Только за деньги 1 33.33%
Голосовавшие: 3. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2019, 12:26   #1
kaunas
Новичок
Джуниор
 
Регистрация: 05.11.2019
Сообщений: 1
Печаль объясните немного

объясните немного.
как работает.

Код:
using System;

namespace GraphsMinCoverage.Models.GraphLab
{
    public class RoundGraph
    {
        #region PublicMethods

        public static GraphData Generate(int verticesCount, double edgesPercentage)
        {
            GraphData graphData = new GraphData();

            for (int i = 0; i < verticesCount; i++)
            {
                var vertex = new VertexData("" + (i + 1)) { ID = i + 1 };
                graphData.Vertices.Add(vertex);
            }

            var edgesCount = CalculateEdgesCount(verticesCount, edgesPercentage);
            bool[,] adjacencyMatrix = GenerateAdjacencyMatrix(verticesCount, edgesCount);

            for (int i = 0; i < verticesCount; i++)
            {
                for (int j = 0; j < verticesCount; j++)
                {
                    if (adjacencyMatrix[i, j])
                    {
                        var edge = new EdgeData(graphData.Vertices[i], graphData.Vertices[j]);
                        graphData.Edges.Add(edge);

                        graphData.Vertices[i].IncidentEdges.Add(edge);
                        graphData.Vertices[j].IncidentEdges.Add(edge);
                    }
                }
            }

            return graphData;
        }
        #endregion

        #region PrivateMethods
        private static bool[,] GenerateAdjacencyMatrix(int verticesCount, int edgesCount)
        {
            int vertex1, vertex2;
            Random rand = new Random();
            bool[,] adjacencyMatrix = new bool[verticesCount, verticesCount];

            adjacencyMatrix[0, 1] = true;
            for (int i = 2; i < verticesCount; i++)
            {
                vertex1 = i;
                vertex2 = rand.Next(0, i);

                adjacencyMatrix[vertex1, vertex2] = true;
            }

            int edgesToAdd = edgesCount - (verticesCount - 1);
            for (int i = 0; i < edgesToAdd; i++)
            {
                do
                {
                    vertex1 = rand.Next(0, verticesCount);
                    vertex2 = rand.Next(0, verticesCount);
                } while (vertex1 == vertex2 || adjacencyMatrix[vertex1, vertex2] || adjacencyMatrix[vertex2, vertex1]);

                adjacencyMatrix[vertex1, vertex2] = true;
            }

            for (int i = 0; i < verticesCount; i++)
            {
                for (int j = 0; j < verticesCount; j++)
                {
                    if (i > j && adjacencyMatrix[i, j])
                    {
                        adjacencyMatrix[j, i] = adjacencyMatrix[i, j];
                        adjacencyMatrix[i, j] = false;
                    }
                }
            }

            return adjacencyMatrix;
        }


        //private void GenerateWeightMatrix()
        //{
        //    GraphData.WeightMatrix = new int[GraphData.VerticesCount, GraphData.VerticesCount];
        //    for (int i = 0; i < GraphData.VerticesCount; i++)
        //    {
        //        for (int j = 0; j < GraphData.VerticesCount; j++)
        //        {
        //            if (GraphData.AdjacencyMatrix[i, j])
        //            {
        //                GraphData.WeightMatrix[i, j] = _rand.Next(1, 10);
        //            }
        //        }
        //    }
        //}

        public static int CalculateEdgesCount(int verticesCount, double edgesPercentage)
        {
            int maxCount = verticesCount * (verticesCount - 1) / 2;
            int edgesCount = Convert.ToInt32(maxCount * edgesPercentage);
            if (edgesCount < verticesCount - 1)
            {
                edgesCount = verticesCount - 1;
            }

            return edgesCount;
        }
        #endregion
    }
}
kaunas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немного веба Praud PHP 7 09.03.2022 07:53
Си++ немного не понятно. GoRcHiZa Помощь студентам 1 15.06.2014 18:58
немного 3Д Антонн C# (си шарп) 0 03.11.2012 01:22
Немного тригонометрии Hexy C# (си шарп) 0 14.06.2012 11:54