]> ruin.nu Git - icfp05.git/blobdiff - newrobber/robber.cpp
added license
[icfp05.git] / newrobber / robber.cpp
index ccac7d918ac804382b51ebfd5383643db8ea889a..46ca6404808a395bfbec94a372df2fbe44a30065 100644 (file)
@@ -12,25 +12,28 @@ string Robber::turn(){
        //Ignore bribing for now
        cout << "nobribe:" << endl;
        string input;
-       cerr << "New turn" << endl;
+       //cerr << "New turn" << endl;
        getline(cin,input);
        _time = clock();
 
-       cerr << "Starting to calculate shortest path" << endl;
+       //cerr << "Starting to calculate shortest path" << endl;
        list<string> l = shortestPath(_location, robber,*this, *this);
        _oldLocation = _location;
        if (l.size() > 0){
-               cerr << "Found a route" << endl;
+               //cerr << "Found a route" << endl;
                list<string>::iterator i = l.begin();
                _location = *++i;
        }
-       cerr << "Moving to: " << _location << endl;
+       //cerr << "Moving to: " << _location << endl;
        return _location;
 }
 
 int Robber::operator()(const SPInfo* node) const{
        //cerr << "Goal for " << node->name << endl;
-       if (node->cost > 10 || (clock()-_time)/CLOCKS_PER_SEC > 2.4)
+       hash_map<string,int>::const_iterator bank = _banks.find(node->name);
+       if (bank != _banks.end() && bank->second > 0)
+               return 1;
+       if ((clock()-_time)/CLOCKS_PER_SEC > 2.4)
                return 1;
        return 0;
 }
@@ -44,32 +47,37 @@ int Robber::cost(const std::string& from, const std::string& to) const{
 
        int cost = 1;
 
-       list<string> closestFootCop = shortestPath(to, cop_foot, FindPlayer(_players, cop_foot, 10), true);
+       int max = 10;
+       list<string> closestFootCop = shortestPath(to, cop_foot, FindPlayer(_players, cop_foot, max), true);
        unsigned int closestCop = closestFootCop.size();
        bool copInCar = false;
-       //cerr << "Cop on fot " << closestCop << " intersections away." << endl;
+       //cerr << "Cop on fot " << closestCop << " intersections away: ";
+       //copy(closestFootCop.begin(), closestFootCop.end(), ostream_iterator<string>(cerr, " : "));
+       //cerr << endl;
 
-       if (closestCop > 0 && closestCop < 3)
-               return 100;
+       if (closestCop > 0)
+               max = closestCop;
 
-       list<string> closestCarCop = shortestPath(to, cop_car, FindPlayer(_players, cop_car, closestCop - 1 > 0 ? closestCop : 5), true);
-       //cerr << "Cop in car " << closestCarCop.size() << " intersections away." << endl;
+       if (max > 1){
+               list<string> closestCarCop = shortestPath(to, cop_car, FindPlayer(_players, cop_car, max - 1), true);
+               //cerr << "Cop in car " << closestCarCop.size() << " intersections away." << endl;
 
-       if (closestCarCop.size() > 0){
-               closestCop = closestCarCop.size();
-               copInCar = true;
+               if (closestCarCop.size() > 0){
+                       closestCop = closestCarCop.size();
+                       copInCar = true;
+               }
        }
 
        //cerr << "Cop " << closestCop << " intersections away." << endl;
-       if (closestCop > 0 && closestCop < 3)
+       if (closestCop > 0 && closestCop < 4)
                return 100;
 
-       //cerr << "Goodness before cop: " << goodness << endl;
+       //cerr << "cost before cop: " << cost << endl;
        if (closestCop > 2){
                //cerr << "Cop " << closestCop << " intersections away." << endl;
-               cost += 8 - (copInCar ? closestCop : closestCop - 1);
+               cost += 12 - (copInCar ? closestCop : closestCop - 1);
        }
-       //cerr << "Goodness after cop: " << goodness << endl;
+       //cerr << "cost after cop: " << cost << endl;
 
        if (conInter->second.type == bank){
                //cerr << "FOUND A BANK" << endl;
@@ -83,7 +91,7 @@ int Robber::cost(const std::string& from, const std::string& to) const{
 
        if (to == _oldLocation)
                cost *= 2;
-       cerr << "Street: " << to << " cost: " << cost << endl;
+       //cerr << "Street: " << to << " cost: " << cost << endl;
 
        return cost;
 }