public StateVertex Initial() { var initialVertex = new InitialVertex(null); stateChart.SetInitialVertex(initialVertex); return(initialVertex); }
public RouteGraphV2(IEnumerable <GTripType> triptypes) { this.totalTripCount = triptypes.Sum(tt => tt.Count); var initialVertexes = new Dictionary <Tuple <StopGroup, int>, InitialVertex>(); foreach (var triptype in triptypes) { var currentStopPosition = new Dictionary <StopGroup, int>(); InitialVertex prevVertex = null; int prevTime = 0; foreach (var entry in triptype.Trip) { int currentPos = 0; currentStopPosition.TryGetValue(entry.Stop.Group, out currentPos); InitialVertex currentVertex = null; initialVertexes.TryGetValue(Tuple.Create(entry.Stop.Group, currentPos), out currentVertex); if (currentVertex == null) { initialVertexes.Add(Tuple.Create(entry.Stop.Group, currentPos), currentVertex = new InitialVertex { Stop = entry.Stop.Group, Position = currentPos }); } if (prevVertex != null) { while (!prevVertex.AddNeighbor(currentVertex, entry.Time - prevTime, triptype.Count)) { currentPos++; currentVertex = null; initialVertexes.TryGetValue(Tuple.Create(entry.Stop.Group, currentPos), out currentVertex); if (currentVertex == null) { initialVertexes.Add(Tuple.Create(entry.Stop.Group, currentPos), currentVertex = new InitialVertex { Stop = entry.Stop.Group, Position = currentPos }); } } } prevVertex = currentVertex; prevTime = entry.Time; currentVertex.TripCount += triptype.Count; currentStopPosition[entry.Stop.Group] = currentPos + 1; } } foreach (var vertex in initialVertexes.Values) { vertex.Finalize(); } this.Vertexes = initialVertexes.Values.Cast <Vertex>().ToList(); }
public bool AddNeighbor(InitialVertex neighbor, int time, int count) { Tuple <int, int> currentValue = null; InitialNeighbors.TryGetValue(neighbor, out currentValue); if (currentValue == null) { if (this.HasAncestor(neighbor)) { return(false); } currentValue = Tuple.Create(0, 0); neighbor.ReverseNeighbors.Add(this); } InitialNeighbors[neighbor] = Tuple.Create(currentValue.Item1 + time * count, currentValue.Item2 + count); return(true); }
public void SetInitialVertex(InitialVertex initialVertex) { this.startVertex = initialVertex; Vertices.Add(initialVertex); }