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); }
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); } } }