From 3a975985ae3a8b2b1cc34df85bc81186afa43842 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Sun, 26 Jun 2005 20:09:26 +0000 Subject: [PATCH] sort the banks in the right order --- robber/robber.cpp | 59 +++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/robber/robber.cpp b/robber/robber.cpp index 8a11def..0e0a265 100644 --- a/robber/robber.cpp +++ b/robber/robber.cpp @@ -33,42 +33,26 @@ string Robber::turn(){ cerr << "Discarding: " << street->first << " since car is needed" << endl; continue; } - double goodness = 10; + double goodness = 0; Intersection& conInter = _intersections[street->first]; - list closestFootCop = shortestPath(street->first, cop_foot, FindPlayer(_players, cop_foot, 5)); - list closestCarCop = shortestPath(street->first, cop_car, FindPlayer(_players, cop_car, 4)); + list closestFootCop = shortestPath(street->first, cop_foot, FindPlayer(_players, cop_foot, 6)); + list closestCarCop = shortestPath(street->first, cop_car, FindPlayer(_players, cop_car, 5)); unsigned int closestCop = 0; bool copInCar = false; - if (closestFootCop.size() < closestCarCop.size() && closestFootCop.size() > 0) - closestCop = closestFootCop.size(); - else { + if (closestCarCop.size() < closestFootCop.size() && closestCarCop.size() > 0){ closestCop = closestCarCop.size(); copInCar = true; - } + }else + closestCop = closestFootCop.size(); - if (closestCop > 0){ + if (closestCop > 0 && closestCop < 3){ cerr << "Cop " << closestCop << " intersections away." << endl; - if (closestCop < 3) - continue; - if (!copInCar) - --closestCop; - goodness *= 1 - 1/closestCop; + continue; } - if (conInter.type == bank){ - cerr << "FOUND A BANK" << endl; - if (closestCop > 0 && closestCop < 4) - continue; - else if (_banks[street->first] > 0){ - cerr << "No cop close to bank" << endl; - return street->first; - } - } - if (goodness == 0) - continue; vector banks; for(hash_map::const_iterator bank = _banks.begin(); bank != _banks.end(); ++bank){ @@ -77,14 +61,33 @@ string Robber::turn(){ list l = shortestPath(street->first, _type, SimpleSPGoal(bank->first)); if (l.size() < 1) continue; - list::iterator i = l.begin(); + //list::iterator i = l.begin(); //++i; - banks.push_back(bank->second/(pow(l.size(),2.0))); + banks.push_back(bank->second/(pow(l.size(),4.0))); } } - sort(banks.begin(),banks.end()); + sort(banks.begin(),banks.end(),greater()); + for (unsigned int i = 0; i < 2 && i < banks.size();++i) goodness += banks[i]; + + cerr << "Goodness before cop: " << goodness << endl; + if (closestCop > 2){ + cerr << "Cop " << closestCop << " intersections away." << endl; + goodness *= 1 - 1/(copInCar ? closestCop : closestCop - 1); + } + cerr << "Goodness after cop: " << goodness << endl; + + if (conInter.type == bank){ + cerr << "FOUND A BANK" << endl; + if (closestCop > 0 && closestCop < 4) + continue; + else if (_banks[street->first] > 0){ + cerr << "No cop close to bank" << endl; + return street->first; + } + } + cerr << "Street: " << street->first << " goodness: " << goodness << endl; streets[street->first] = goodness; } @@ -97,7 +100,7 @@ string Robber::turn(){ cerr << endl; */ - string destination; + string destination = _location; double goodness = 0; for (hash_map::const_iterator dest = streets.begin(); dest != streets.end(); ++dest){ -- 2.39.2