public StateVertex Initial()
        {
            var initialVertex = new InitialVertex(null);

            stateChart.SetInitialVertex(initialVertex);
            return(initialVertex);
        }
예제 #2
0
        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();
        }
예제 #3
0
            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);
            }
예제 #4
0
 public void SetInitialVertex(InitialVertex initialVertex)
 {
     this.startVertex = initialVertex;
     Vertices.Add(initialVertex);
 }