Exemple #1
0
 public Vertex(Vector2 v, Route route)
 {
     Location = v;
     Visited = false;
     ConnectedEdges = new List<Edge>();
     if (route != null)
         Route = route;
     else
         Route = new Route(Double.MaxValue, null);
 }
Exemple #2
0
        private void visitNextVertex(Vertex currentVertex)
        {
            currentVertex.Visited = true;
            foreach (Edge edge in currentVertex.ConnectedEdges)
            {
                Vertex nextVertex = null;
                if (edge.Vertex1.Equals(currentVertex))
                    nextVertex = edge.Vertex2;
                else if (edge.Vertex2.Equals(currentVertex))
                    nextVertex = edge.Vertex1;

                double newDistance = currentVertex.Route.Distance + edge.weight;
                double oldDistance = nextVertex.Route.Distance;

                if (newDistance < oldDistance)
                {
                    Route newRoute = new Route(currentVertex.Route.Distance, currentVertex.Route.Edges);
                    newRoute.Edges.Add(edge);
                    newRoute.Distance = newDistance;
                    nextVertex.Route = newRoute;
                    nextVertex.Visited = false;
                }

                if (!nextVertex.Visited)
                {
                    visitNextVertex(nextVertex);
                }
            }
        }