fr1kin

calculateSwapCost

Jun 9th, 2015
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.66 KB | None | 0 0
  1. /**
  2.     Calculating the cost of swapping 2 nodes without having to recalculate the entire path.
  3.     Saves nano seconds!
  4. */
  5.  
  6. public int clampIndex(int index)
  7. {
  8.     if(index < 0)
  9.         return size() - 1;
  10.     else if(index > (size() - 1))
  11.         return 0;
  12.     else
  13.         return index;
  14. }
  15.  
  16. public double getNodeToFromDistance(BlockNode node, int index)
  17. {
  18.     return node.distanceTo(     get(    clampIndex(index - 1))) +    // previous node
  19.             node.distanceTo(    get(    clampIndex(index + 1)));     // next node
  20. }
  21.  
  22. public double calculateSwapCost(int firstIndex, int secondIndex)
  23. {
  24.     BlockNode firstNode = group.get(firstIndex);
  25.     BlockNode secondNode = group.get(secondIndex);
  26.  
  27.     double cost = getTotalDistance();
  28.     // enjoy my ugly code
  29.     if(firstIndex != (secondIndex - 1) && firstIndex != (secondIndex + 1)) {
  30.         cost -= (getNodeToFromDistance(firstNode, firstIndex) + getNodeToFromDistance(secondNode, secondIndex));
  31.         cost += (getNodeToFromDistance(firstNode, secondIndex) + getNodeToFromDistance(secondNode, firstIndex));
  32.     } else {
  33.         if(firstIndex > secondIndex) {
  34.             cost -= (getNodeToFromDistance(secondNode, secondIndex) + firstNode.distanceTo(get(clampIndex(firstIndex + 1))));
  35.             cost += (firstNode.distanceTo(get(clampIndex(secondIndex - 1))) + firstNode.distanceTo(get(clampIndex(secondIndex))) + secondNode.distanceTo(get(clampIndex(firstIndex + 1))));
  36.         } else {
  37.             cost -= (getNodeToFromDistance(firstNode, firstIndex) + secondNode.distanceTo(get(clampIndex(secondIndex + 1))));
  38.             cost += (secondNode.distanceTo(get(clampIndex(firstIndex - 1))) + secondNode.distanceTo(get(clampIndex(firstIndex))) + firstNode.distanceTo(get(clampIndex(secondIndex + 1))));
  39.         }
  40.     }
  41.     return cost;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment