/// <summary> /// Вычисление суммы весов ребер для следующей вершины /// </summary> /// <param name="info">Информация о текущей вершине</param> void SetSumToNextVertex(GraphVertexInfo info) { info.IsUnvisited = false; foreach (var e in info.Vertex.Edges) { var nextInfo = GetVertexInfo(e.ConnectedVertex); var sum = info.EdgesWeightSum + e.EdgeWeight; if (sum < nextInfo.EdgesWeightSum) { nextInfo.EdgesWeightSum = sum; nextInfo.PreviousVertex = info.Vertex; } } }
/// <summary> /// Поиск непосещенной вершины с минимальным значением суммы /// </summary> /// <returns>Информация о вершине</returns> public GraphVertexInfo FindUnvisitedVertexWithMinSum() { double minValue = int.MaxValue; GraphVertexInfo minVertexInfo = null; foreach (var i in infos) { if (i.IsUnvisited && i.EdgesWeightSum < minValue) { minVertexInfo = i; minValue = i.EdgesWeightSum; } } return(minVertexInfo); }