]> ruin.nu Git - icfp05.git/blobdiff - botsrc/bot.cpp
added limit to SimpleSPGoal and ensured that two additional cops chases the smell
[icfp05.git] / botsrc / bot.cpp
index 10fb5447952d3e4bd58c21e80af169cb2fbf7e6e..411d933ee50d7bab0ab689b320a753d464cb3f06 100644 (file)
@@ -47,10 +47,10 @@ void Bot::play(){
                getline(cin, input);
                if (input == "game-over")
                        return;
-               cerr << input << endl;
-               cerr << "Updating world" << endl;
+               //cerr << input << endl;
+               //cerr << "Updating world" << endl;
                updateWorld();
-               cerr << "Done updating world" << endl;
+               //cerr << "Done updating world" << endl;
                _type = _players[_name].type;
                _location = _players[_name].location;
                //cerr << "New turn" << endl;
@@ -155,22 +155,29 @@ void Bot::buildGraph(){
                if (type == "foot"){
                        _intersections[from].connections[to] = both;
                        Intersection& inter = _intersections[to];
-                       if (inter.connections.find(from) == inter.connections.end())
+                       hash_map<string,StreetType>::iterator conn = inter.connections.find(from);
+                       if (conn == inter.connections.end())
                                inter.connections[from] = foot;
-               }else
-                       _intersections[from].connections[to] = car;
+                       else if (conn->second == car)
+                               inter.connections[from] = both;
+               }else{
+                       Intersection& inter = _intersections[from];
+                       hash_map<string,StreetType>::iterator conn = inter.connections.find(to);
+                       if (conn == inter.connections.end())
+                               inter.connections[from] = car;
+                       else if (conn->second == foot)
+                               inter.connections[from] = both;
+               }
        }
        //cerr << "Number of streets: " << streets << endl;
        getline(cin, input);
 }
 
 void Bot::updateWorld(){
-       cerr << "Entered updateWorld function" << endl;
        string input;
        getline(cin,input);
-       cerr << input << endl;
        _world = value<int>(input);
-       cerr << "World: " << _world << endl;
+       //cerr << "World: " << _world << endl;
 
        getline(cin,input);
        _robbed = value<int>(input);
@@ -264,7 +271,7 @@ T value(std::string input){
 }
 
 std::string Bot::turn(){
-       cerr << "Using stupid stand still Bot::turn" << endl;
+       //cerr << "Using stupid stand still Bot::turn" << endl;
        return _location;
 }
 
@@ -362,10 +369,12 @@ std::list<std::string> Bot::shortestPath(const std::string& from, PlayerType typ
        return list<string>();
 }
 
-SimpleSPGoal::SimpleSPGoal(std::string to):_to(to){
+SimpleSPGoal::SimpleSPGoal(const std::string& to, int limit):_to(to), _limit(limit){
 }
 
 int SimpleSPGoal::operator()(const SPInfo* node) const{
+       if (_limit > 0 && node->cost >= _limit)
+               return -1;
        if (node->name == _to)
                return 1;
        return 0;