/// <summary>
        /// Получить словарь всех смежных вершин.
        /// </summary>
        /// <param name="vertex">Объект на вершину.</param>
        /// <returns>Возвращает словарь всех смежных вершин.</returns>
        public Dictionary <GraphVertex, int> GetVertexAllRelations(GraphVertex vertex)
        {
            var result = new Dictionary <GraphVertex, int>();

            foreach (var edge in edges)
            {
                if (edge.From.Equals(vertex))
                {
                    result.Add(edge.To, edge.Weight);
                }
            }

            return(result);
        }
        /// <summary>
        /// Получить список смежных вершин.
        /// </summary>
        /// <param name="vertex">Объект на вершину.</param>
        /// <returns>Возвращает список смежных вершин.</returns>
        public List <GraphVertex> GetVertexRelations(GraphVertex vertex)
        {
            var result = new List <GraphVertex>();

            foreach (var edge in edges)
            {
                if (edge.From.Equals(vertex))
                {
                    result.Add(edge.To);
                }
            }

            return(result);
        }
        /// <summary>
        /// Проверяет на существование связи.
        /// </summary>
        /// <param name="start">Объект на начальную вергину.</param>
        /// <param name="finish">Объект на конечную вершину.</param>
        /// <returns>Возвращает true, если существует иначе, false.</returns>
        public bool IsWave(GraphVertex start, GraphVertex finish)
        {
            var vertices = new List <GraphVertex>
            {
                start
            };

            for (int index = 0; index < vertices.Count; index++)
            {
                var vertex = vertices[index];

                foreach (var current in GetVertexRelations(vertex))
                {
                    if (!vertices.Contains(current))
                    {
                        vertices.Add(current);
                    }
                }
            }

            return(vertices.Contains(finish));
        }
        /// <summary>
        /// Добавить ребро.
        /// </summary>
        /// <param name="from">Объект вершины из.</param>
        /// <param name="to">Объект вершины в.</param>
        /// <param name="weight">Вес.</param>
        public void AddEdge(GraphVertex from, GraphVertex to, int weight = 1)
        {
            var edge = new GraphEdge(from, to, weight);

            edges.Add(edge);
        }
 /// <summary>
 /// Добавить вершину.
 /// </summary>
 /// <param name="vertex">Вершина.</param>
 public void AddVertex(GraphVertex vertex)
 {
     vertices.Add(vertex);
 }