Beispiel #1
0
        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));
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
 /// <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);
     }
 }