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