00001 00013 #ifndef SINGLEPATHFINDER_H_INCLUDED 00014 #define SINGLEPATHFINDER_H_INCLUDED 00015 00016 #include <vector> 00017 #include <boost/unordered_map.hpp> 00018 #include <boost/unordered_set.hpp> 00019 #include <boost/noncopyable.hpp> 00020 #include "types.h" 00021 00022 namespace BPF 00023 { 00024 00031 class SinglePathFinder : boost::noncopyable 00032 { 00033 typedef boost::unordered_map<std::pair<int, int> , int> MinTimeForCrossingLineMapType; 00034 00036 boost::unordered_map<int, int> minTimeForCrossingMap_; 00037 00040 MinTimeForCrossingLineMapType minTimeForCrossingLineMap_; 00041 00043 int changeLineDuration_; 00044 00046 const IntSetVect &stationsFromLineMap_; 00047 00049 const IntSetVect &crossingFromLineMap_; 00050 00052 const IntSetVect &linesFromStationMap_; 00053 00055 const TimeBetweenStationOnLineMap &stationStationTimeInLine_; 00056 00058 std::vector<bool> lockedStations_; 00059 00061 std::vector<Step> currentWay_; 00062 00064 std::vector<Step> bestWay_; 00065 00067 int bestTime_; 00068 00070 void testThisCrossing( 00071 int stationID, 00072 int destStationID, 00073 int lastLineID, 00074 int currentTime); 00075 00077 void testThisLine( 00078 int lineID, 00079 int destStationID, 00080 int lastStationID, 00081 int currentTime); 00082 00083 public: 00084 SinglePathFinder( 00085 int changeLineDuration, 00086 const IntSetVect &stationsFromLineMap, 00087 const IntSetVect &crossingFromLineMap, 00088 const IntSetVect &linesFromStationMap, 00089 const TimeBetweenStationOnLineMap &stationStationTimeInLine 00090 ); 00091 00093 void computeBestWay( 00094 int stationID, 00095 int destStationID, 00096 std::vector<Step> &bestWay, 00097 int &bestTime); 00098 }; 00099 00100 } 00101 00102 00103 #endif // SINGLEPATHFINDER_H_INCLUDED