From: Steinar H. Gunderson Date: Fri, 7 Apr 2006 15:14:47 +0000 (+0000) Subject: Make distance_middle() slightly less dumb. X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=74d9573acd9de6509f42f98e015b6eb26084a178;p=nms Make distance_middle() slightly less dumb. --- 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)