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> /// Добавляет в граф вершину v. /// </summary> public IGraph AddVertex(Vertex v) { if (v == null) throw new ArgumentNullException("v"); foreach (Vertex V in Vs) if (v.Name == V.Name) throw new ArgumentException("Вершина с таким именем уже присутствует в графе."); Graph newGraph = new Graph(this.VertexCount + 1, this.Directed); for (int i = 0; i < this.VertexCount; i++) { int j = this.Directed ? 0 : i; for (; j < this.VertexCount; j++) newGraph.M[i, j] = this.M[i, j]; newGraph.Vs[i] = (Vertex)this.Vs[i].Clone(); } newGraph.Vs[this.VertexCount] = v; return newGraph; }
/// <summary> /// Возвращает или присваивает имя вершины с индексом index. /// </summary> public String this[int index] { get { if (index >= Matrix.Dimension || index < 0) throw new ArgumentOutOfRangeException("index", "Значение i должно быть в диапазоне [0, " + (Matrix.Dimension - 1).ToString(CultureInfo.InvariantCulture.NumberFormat) + "]."); return Vertices[index].Name; } set { if (index >= Matrix.Dimension || index < 0) throw new ArgumentOutOfRangeException("index", "Значение i должно быть в диапазоне [0, " + (Matrix.Dimension - 1).ToString(CultureInfo.InvariantCulture.NumberFormat) + "]."); if (String.IsNullOrEmpty(value)) throw new ArgumentException("Имя вершины не может быть пустым.", "value"); for (int i = 0; i < Vertices.Length; ++i) if (Vertices[i].Name == value && i != index) throw new ArgumentException("Вершина с таким именем уже существует.", "value"); Vertices[index] = new Vertex(value); } }