+void Cop::preGamePreparations(){
+ //cerr << "Preparing.." << endl;
+ _copTargets[_name].first = _robberLocation;
+ _copTargets[_name].second = cop_foot;
+
+ priority_queue<pair<int,string> > banks;
+ //cerr << "Number of banks: " << endl;
+ for(hash_map<string,int>::const_iterator bank = _banks.begin();
+ bank != _banks.end(); ++bank){
+ //cerr << "Finding bank: " << bank->first << endl;
+ list<string> bankRoute = shortestPath(_robberLocation, robber, SimpleSPGoal(bank->first));
+ //cerr << "Pushing bank" << endl;
+ banks.push(pair<int,string>(-bankRoute.size(), bank->first));
+ }
+ //cerr << "Done finding banks.." << endl;
+ priority_queue<pair<int,string> > banks2;
+ for (int i = 0; i < 4 && banks.size() > 0;++i){
+ const pair<int,string>& bank = banks.top();
+ //cerr << "Going to bank: " << bank.second << ", distance" << -bank.first << endl;
+ list<string> bankRouteFoot = shortestPath(_copHq, cop_foot, SimpleSPGoal(bank.second));
+ list<string> bankRouteCar = shortestPath(_copHq, cop_car, SimpleSPGoal(bank.second));
+ banks2.push(pair<int,string>(bankRouteCar.size() - bankRouteFoot.size(), bank.second));
+ banks.pop();
+ }
+ for (hash_map<string,Player>::const_iterator player = _players.begin();
+ player != _players.end() && banks2.size() > 0; ++player){
+ if (player->first == _name || player->second.type == robber)
+ continue;
+ const pair<int,string>& bank = banks2.top();
+ _copTargets[player->first].first = bank.second;
+ //cerr << "Sending: " << player->first << " to: " << bank.second;
+ if (banks2.size() <= 2)
+ _copTargets[player->first].second = cop_car;
+ else
+ _copTargets[player->first].second = cop_foot;
+ //cerr << " on: " << _copTargets[player->first].second << endl;
+ _winningPlans[player->first] = 0;
+ banks2.pop();
+ }
+}
+