/// <summary> /// Добавление вершины /// </summary> /// <param name="mapPoint">Имя вершины</param> public GraphVertex AddVertex(MapPoint mapPoint) { var grafVertex = new GraphVertex(mapPoint); VertexList.Add(grafVertex); return(grafVertex); }
/// <summary> /// Формирование пути /// </summary> /// <param name="startVertex">Начальная вершина</param> /// <param name="endVertex">Конечная вершина</param> /// <returns>Путь</returns> string GetPath(GraphVertex startVertex, GraphVertex endVertex) { var path = endVertex.ToString(); while (startVertex != endVertex) { endVertex = GetVertexInfo(endVertex).PreviousVertex; path = endVertex + path; } return(path); }
List <MapPoint> GetPointListPath(GraphVertex startVertex, GraphVertex endVertex) { var restlt = new List <MapPoint> { endVertex.Point }; // ReSharper disable once LoopVariableIsNeverChangedInsideLoop while (startVertex != endVertex) { endVertex = GetVertexInfo(endVertex).PreviousVertex; restlt.Add(endVertex.Point); } return(restlt); }
/// <summary> /// Поиск кратчайшего пути по вершинам /// </summary> /// <param name="startVertex">Стартовая вершина</param> /// <param name="finishVertex">Финишная вершина</param> /// <returns>Кратчайший путь</returns> public string FindShortestPath(GraphVertex startVertex, GraphVertex finishVertex) { InitInfo(); var first = GetVertexInfo(startVertex); first.EdgesWeightSum = 0; while (true) { var current = FindUnvisitedVertexWithMinSum(); if (current == null) { break; } SetSumToNextVertex(current); } return(GetPath(startVertex, finishVertex)); }
/// <summary> /// Добавить ребро /// </summary> /// <param name="vertex">Вершина</param> /// <param name="edgeWeight">Вес</param> public void AddEdge(GraphVertex vertex, int edgeWeight) { AddEdge(new GraphEdge(vertex, edgeWeight)); }
/// <summary> /// Получение информации о вершине графа /// </summary> /// <param name="v">Вершина</param> /// <returns>Информация о вершине</returns> GraphVertexInfo GetVertexInfo(GraphVertex v) { return(_infos.FirstOrDefault(i => i.Vertex.Equals(v))); }