/// <summary> /// Поиск непосещенной вершины с минимальным значением суммы /// </summary> /// <returns>Вершина графа с информацией для алгоритма Дейкстры <see cref="DijkstraVertex"/>.</returns> private DijkstraVertex FindUnvisitedVertexWithMinSum() { var minValue = double.MaxValue; DijkstraVertex minVertexInfo = null; foreach (var vertex in _vertexes) { if (!vertex.IsVisited && vertex.EdgesWeightSum < minValue) { minVertexInfo = vertex; minValue = vertex.EdgesWeightSum; } } return(minVertexInfo); }
/// <summary> /// Вычисление суммы весов ребер для следующей вершины /// </summary> /// <param name="vertex">Информация о текущей вершине</param> void SetOptimalWaysForNeighbor(DijkstraVertex vertex) { foreach (var cityPlace in _cityMap.GetNeighborCityPlaces(vertex.CityPlace)) { var nextVertex = _vertexes.GetDijkstraVertex(cityPlace); var road = _cityMap.GetRoadBetween(vertex.CityPlace, nextVertex.CityPlace); var sum = vertex.EdgesWeightSum + road.Weight; if (!(sum < nextVertex.EdgesWeightSum)) { continue; } nextVertex.EdgesWeightSum = sum; nextVertex.PreviousCityPlace = vertex.CityPlace; } vertex.IsVisited = true; }