//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;
}
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;
if (to == _oldLocation)
cost *= 2;
- cerr << "Street: " << to << " cost: " << cost << endl;
+ //cerr << "Street: " << to << " cost: " << cost << endl;
return cost;
}