From 8ec2ebe00f985557a3fce5a18e3dbfdae304a0eb Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Sun, 10 Jul 2005 15:14:49 +0000 Subject: [PATCH] new robber is good --- newrobber/newrobber.pro | 2 +- newrobber/robber.cpp | 38 +++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/newrobber/newrobber.pro b/newrobber/newrobber.pro index d8e180d..d5ef0c7 100644 --- a/newrobber/newrobber.pro +++ b/newrobber/newrobber.pro @@ -6,7 +6,7 @@ TEMPLATE = app CONFIG -= qt #CONFIG += debug unix:LIBS += -lm -TARGET = ../nrobber +TARGET = ../robber2 # Input diff --git a/newrobber/robber.cpp b/newrobber/robber.cpp index ccac7d9..f2a3241 100644 --- a/newrobber/robber.cpp +++ b/newrobber/robber.cpp @@ -30,7 +30,10 @@ string Robber::turn(){ 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::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 closestFootCop = shortestPath(to, cop_foot, FindPlayer(_players, cop_foot, 10), true); + int max = 10; + list 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(cerr, " : ")); + cerr << endl; - if (closestCop > 0 && closestCop < 3) - return 100; + if (closestCop > 0) + max = closestCop; - list 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 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); + cerr << "Cop " << closestCop << " intersections away." << endl; + 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; -- 2.39.2