]> git.sesse.net Git - nms/commitdiff
Make distance_middle() slightly less dumb.
authorSteinar H. Gunderson <sesse@samfundet.no>
Fri, 7 Apr 2006 15:14:47 +0000 (15:14 +0000)
committerSteinar H. Gunderson <sesse@samfundet.no>
Fri, 7 Apr 2006 15:14:47 +0000 (15:14 +0000)
tsp/tsp.cpp

index 06fb7f0f1df7c0e13ca2450c48028e1e62fd2f7a..af6185e4953786481bf8bb294898eb0560fb44fb 100644 (file)
@@ -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)