From 584628967d778aa91fddee0b39f572d189e18216 Mon Sep 17 00:00:00 2001 From: szdytom Date: Thu, 18 Jan 2024 20:16:26 +0800 Subject: [PATCH] fix POI collision --- optimizer/box-breaker.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/optimizer/box-breaker.cpp b/optimizer/box-breaker.cpp index 6a14c21..904e201 100644 --- a/optimizer/box-breaker.cpp +++ b/optimizer/box-breaker.cpp @@ -163,8 +163,8 @@ inline int solve(Maze q) { }; // namespace Solve const float initial_temperature = 10; -const float initial_temperature_pv = 70; -const float termperature_delta = .98; +const float initial_temperature_pv = 60; +const float termperature_delta = .97; const int population_limit = 30; struct Gene { @@ -186,11 +186,14 @@ inline void expandAll(Maze q, std::vector &res, float t = initial_temperat for (int j : {0, 1}) { for (int d : {-1, 1}) { compiler_assume(q.poi[i][j] >= 0 && q.poi[i][j] < N); - int z = q.poi[i][j] + d; - if (0 <= z && z < N) { - q.poi[i][j] += d; - expand(q, res, t); - q.poi[i][j] -= d; + q.poi[i][j] += d; + if (0 <= q.poi[i][j] && q.poi[i][j] < N) { + bool flag = false; + for (int k = 0; k < POI_EXCEED; ++k) + flag |= (q.poi[i][0] == q.poi[k][0] && q.poi[i][1] == q.poi[k][1]); + + if (!flag) + expand(q, res, t); } } }