/// <summary> /// Генерация нового случайного графа. /// </summary> /// <returns>Новый экземпляр сгенерированного графа.</returns> public MainGraph Generate() { var list = new AdjacencyList(vertexCount); // Создание связного графа с E = V - 1 for (int i = 1; i < vertexCount; i++) { list.AddEdge(i, Utility.Rand.Next(0, i - 1)); } if (vertexCount < 3) { return(AdjacencyList.GenerateGraph(list, medCount, villCount)); } // Добавление новых ребер для создания циклов int new_edges = Utility.Rand.Next(0, vertexCount * (vertexCount - 1) / 2 - vertexCount); for (int e = 0; e < new_edges; e++) { int i = Utility.Rand.Next(0, vertexCount - 1); int j = Utility.Rand.Next(0, vertexCount - 1); if (i != j && !list.IsAdjacent(i, j)) { list.AddEdge(i, j); } } return(AdjacencyList.GenerateGraph(list, medCount, villCount)); }