4 #include <ext/hash_map>
9 // These are needed to be able to use std::string as key in a hash_map.
11 template< typename CharT, typename Traits, typename Alloc >
12 struct hash< std::basic_string<CharT, Traits, Alloc> > {
13 size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
15 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
17 return c.hash(s.c_str(), s.c_str() + s.size());
23 template< typename CharT, typename Traits, typename Alloc >
24 struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
26 size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
28 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
30 return c.hash(s.c_str(), s.c_str() + s.size());
36 enum StreetType{foot, car, both};
37 enum PlayerType{robber, cop_foot, cop_car};
38 enum IntersectionType{hq, bank, robber_start, ordinary};
41 __gnu_cxx::hash_map<std::string,StreetType> connections;
42 IntersectionType type;
58 T value(std::string input);
69 Bot(const std::string& name, PlayerType type);
77 virtual std::string turn();
78 virtual void preGamePreparations(){};
79 virtual void move(std::string location);
80 virtual void sendInformation();
81 virtual void getInformation();
82 virtual void sendPlan();
83 virtual void getPlans();
85 virtual void voteResult();
87 template<class Goal, class Cost>
88 std::list<std::string> shortestPath(const std::string& from, PlayerType type, const Goal& goal, const Cost& cost, bool reverse = false) const;
90 std::list<std::string> shortestPath(const std::string& from, PlayerType type, const Goal& goal, bool reverse = false) const;
92 __gnu_cxx::hash_map<std::string, Intersection> _intersections;
93 __gnu_cxx::hash_map<std::string, Player> _players;
94 __gnu_cxx::hash_map<std::string, int> _banks;
95 std::map<int, std::string> _evidence;
96 std::map<PlayerType, std::string> _playerTypeNames;
97 std::map<std::string, PlayerType> _playerTypes;
100 std::string _location;
104 std::string _robberLocation;
106 __gnu_cxx::hash_map<std::string, int> _winningPlans;
114 SimpleSPGoal(const std::string& to, int limit = 0):_to(to), _limit(limit){
116 inline int operator()(const SPInfo* node) const{
117 if (_limit > 0 && node->cost >= _limit)
119 if (node->name == _to)
128 const __gnu_cxx::hash_map<std::string, Player>& _players;
131 FindPlayer(const __gnu_cxx::hash_map<std::string, Player>& players, PlayerType type, int limit = 0): _players(players), _type(type), _limit(limit){
133 inline int operator()(const SPInfo* node) const{
134 if (_limit > 0 && node->cost >= _limit)
136 for(__gnu_cxx::hash_map<std::string, Player>::const_iterator player = _players.begin();
137 player != _players.end(); ++player){
138 if (player->second.type == _type && player->second.location == node->name){
148 inline bool operator()(const SPInfo* v1, const SPInfo* v2){
149 return v1->cost > v2->cost;