private IVertex[] Vs; // Вершины графа #endregion Fields #region Constructors /// <summary> /// Создаёт новый граф с VertexCount вершинами. /// </summary> /// <param name="vertexCount">Число вершин новго графа.</param> /// <param name="isDirected">Равно true, если граф ориентированный.</param> public Graph(int vertexCount, bool isDirected) { if (vertexCount <= 0) throw new ArgumentOutOfRangeException("vertexCount", "Число вершин графа vertexCount должно быть больше 0."); M = new AdjMatrix(vertexCount, !isDirected); Vs = new Vertex[vertexCount]; for (int i = 0; i < vertexCount; i++) Vs[i] = new Vertex((i + 1).ToString(CultureInfo.InvariantCulture.NumberFormat)); }
/// <summary> /// Создаёт новый граф с матрицей смежности, представленной массивом Matrix. /// </summary> /// <param name="matrix">Двумерный массив, содержащий матрицу смежности нового графа.</param> /// <param name="isDirected">Равно true, если граф ориентированный.</param> public Graph(int[,] matrix, bool isDirected) { if (matrix == null) throw new ArgumentNullException("matrix"); if (matrix.Length == 0) throw new ArgumentException("Число элементов матрицы matrix должно быть больше 0.", "matrix"); int vCount = Convert.ToInt32(Math.Round(Math.Sqrt(matrix.Length))); bool Symmentrical = !isDirected; try { if (Symmentrical) for (int i = 0; i < vCount; i++) { for (int j = i; j < vCount; j++) if (matrix[i, j] != matrix[j, i]) { throw new ArgumentException("Матрица смежности matrix должна быть симметричной.", "matrix"); } } this.M = new AdjMatrix(vCount, Symmentrical); this.Vs = new Vertex[vCount]; for (int i = 0; i < vCount; i++) { this.Vertices[i] = new Vertex((i + 1).ToString(CultureInfo.InvariantCulture.NumberFormat)); if (Symmentrical) for (int j = i; j < vCount; j++) { if (matrix[i, j] != 0 && matrix[i, j] != 1) throw new ArgumentException("Элементом матрицы matrix может быть только 0 или 1.", "matrix"); M[i, j] = matrix[i, j]; } else for (int j = 0; j < vCount; j++) { if (matrix[i, j] != 0 && matrix[i, j] != 1) throw new ArgumentException("Элементом матрицы matrix может быть только 0 или 1.", "matrix"); M[i, j] = matrix[i, j]; } } } catch (IndexOutOfRangeException) { throw new ArgumentException("Матрица matrix должна быть квадратной.", "matrix"); } }