Example #1
0
    public City FindIntermediateCity(GraphVertex startVertex, GraphVertex finishVertex)
    {
        GraphVertexInfo temp = null;

        if (startVertex == null || startVertex.number > infos.Length - 1)
        {
            return(null);
        }
        GraphVertexInfo first = infos[startVertex.number];

        if (first != null && finishVertex != null)
        {
            first.EdgesWeightSum = 0;

            while (true)
            {
                GraphVertexInfo current = FindUnvisitedVertexWithMinSum(temp);
                if (current == null)
                {
                    break;
                }
                SetSumToNextVertex(current);
            }

            return(GetNextCity(startVertex, finishVertex));
        }
        else
        {
            return(null);
        }
    }
Example #2
0
    City GetNextCity(GraphVertex startVertex, GraphVertex endVertex)
    {
        var path = new List <City>();

        path.Add(endVertex.City);
        while (startVertex != endVertex)
        {
            if (endVertex.number > infos.Length - 1)
            {
                GraphVertexInfo temp = GetVertexInfo(endVertex);
                if (temp != null)
                {
                    GraphVertex vert = temp.Vertex;
                    endVertex = temp.PreviousVertex;
                    path.Add(endVertex.City);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                endVertex = infos[endVertex.number].PreviousVertex;
                if (endVertex == null)
                {
                    return(null);
                }
                path.Add(endVertex.City);
            }
        }
        return(path[path.Count - 2]);
    }
Example #3
0
    public void InitInfo()
    {
        infos = new GraphVertexInfo[graph.Vertices.Count];

        for (int i = 0; i < graph.Vertices.Count; i++)
        {
            infos[i] = new GraphVertexInfo(graph.Vertices[i], i);
        }
    }
 private void SetSumToNextVertex(GraphVertexInfo Info)
 {
     Info.IsUnvisited = false;
     foreach (var e in Info.Vertex.Edges)
     {
         var nextInfo = GetVertexInfo(e.ConnectedVertex);
         var sum      = Info.EdgeWeightSum + e.Weight;
         if (sum < nextInfo.EdgeWeightSum)
         {
             nextInfo.EdgeWeightSum  = sum;
             nextInfo.PreviousVertex = Info.Vertex;
         }
     }
 }
 void SetSumToNextVertex(GraphVertexInfo info)
 {
     info.IsUnvisited = false;
     foreach (var e in GetAllEdges(info.Vertex.Name))
     {
         var nextInfo = GetVertexInfo(e.To);
         var sum      = info.EdgesWeightSum + e.Lenght;
         if (sum < nextInfo.EdgesWeightSum)
         {
             nextInfo.EdgesWeightSum = sum;
             nextInfo.PreviousVertex = info.Vertex;
         }
     }
 }
        private GraphVertexInfo FindUnvisitedVertexWithMinSum()
        {
            var             minValue      = int.MaxValue;
            GraphVertexInfo minVertexInfo = null;

            foreach (var i in infos)
            {
                if (i.IsUnvisited && i.EdgeWeightSum < minValue)
                {
                    minVertexInfo = i;
                    minValue      = i.EdgeWeightSum;
                }
            }
            return(minVertexInfo);
        }
Example #7
0
    public GraphVertexInfo FindUnvisitedVertexWithMinSum(GraphVertexInfo graph)
    {
        var             minValue      = int.MaxValue;
        GraphVertexInfo minVertexInfo = null;

        for (int i = 0; i < infos.Length; i++)
        {
            if (infos[i].IsUnvisited && infos[i].EdgesWeightSum < minValue)
            {
                minVertexInfo = infos[i];
                minValue      = infos[i].EdgesWeightSum;
                break;
            }
        }
        return(minVertexInfo);
    }
Example #8
0
 /// <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;
             //=====
             nextInfo.weight = e.EdgeWeight;
             nextInfo.train  = e.Train;
         }
     }
 }
Example #9
0
    void SetSumToNextVertex(GraphVertexInfo info)
    {
        GraphVertexInfo nextInfo;
        int             sum;

        info.IsUnvisited = false;
        foreach (var e in info.Vertex.Edges)
        {
            nextInfo = infos[e.ConnectedVertex.number];
            sum      = info.EdgesWeightSum + e.EdgeWeight;
            if (sum < nextInfo.EdgesWeightSum)
            {
                nextInfo.EdgesWeightSum = sum;
                nextInfo.PreviousVertex = info.Vertex;
            }
        }
    }