From 74d9573acd9de6509f42f98e015b6eb26084a178 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 7 Apr 2006 15:14:47 +0000 Subject: [PATCH] Make distance_middle() slightly less dumb. --- tsp/tsp.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tsp/tsp.cpp b/tsp/tsp.cpp index 06fb7f0..af6185e 100644 --- a/tsp/tsp.cpp +++ b/tsp/tsp.cpp @@ -76,10 +76,17 @@ int distance(int row_from, int switch_from, int side_from, int row_to, int switc } /* we'll need to go to one of the three middles */ - int best1 = distance_middle(switch_from, 1) + distance_middle(switch_to, 1); int best2 = distance_middle(switch_from, 2) + distance_middle(switch_to, 2); - int best3 = distance_middle(switch_from, 3) + distance_middle(switch_to, 3); - return std::min(std::min(best1, best2), best3) + distance_row(row_from, row_to); + int distrow = distance_row(row_from, row_to); + if ((switch_from > 3) != (switch_to > 3)) + return best2 + distrow; + if (switch_from > 3) { + int best3 = distance_middle(switch_from, 3) + distance_middle(switch_to, 3); + return std::min(best2, best3) + distrow; + } else { + int best1 = distance_middle(switch_from, 1) + distance_middle(switch_to, 1); + return std::min(best2, best1) + distrow; + } } int optimistic_distance(int row_from, int switch_from, int row_to, int switch_to) -- 2.39.5