Guest User

UVA439

a guest
Oct 14th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.07 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.  
  5.     private static int[][] memo;
  6.     private static int finalPosX;
  7.     private static int finalPosY;
  8.     private static boolean[][] visited;
  9.     private static int[] dx = { 2, 2, -2, -2, 1, -1, -1, 1};
  10.     private static int[] dy = { 1, -1, 1, -1, -2, 2, -2, 2};
  11.     private static final int INF = 1<<20;
  12.  
  13.     public static void main(String[] args) {
  14.         Scanner sc = new Scanner(System.in);
  15.  
  16.         while (sc.hasNextLine()) {
  17.             memo = new int[9][9];
  18.             visited = new boolean[9][9];
  19.  
  20.             for (int i = 0; i < 9; i++)
  21.                 for (int j = 0; j < 9; j++)
  22.                     memo[i][j] = INF;
  23.  
  24.             String currPosString = sc.next();
  25.             String finalPosString = sc.next();
  26.  
  27.             int currPosX = currPosString.charAt(0) - 'a' + 1;
  28.             int currPosY = currPosString.charAt(1) - '0';
  29.             finalPosX = finalPosString.charAt(0) - 'a' + 1;
  30.             finalPosY = finalPosString.charAt(1) - '0';
  31.  
  32.             visited[currPosX][currPosY] = true;
  33.             visited[finalPosX][finalPosY] = true;
  34.             memo[finalPosX][finalPosY] = 0;
  35.             //System.out.println(currPosX + " " + currPosY + " " + finalPosX + " " + finalPosY);
  36.             System.out.printf("To get from %s to %s takes %d knight moves.\n", currPosString, finalPosString, solve(currPosX, currPosY));
  37.             //System.out.println(memo[2][4]);
  38.         }
  39.     }
  40.  
  41.     private static int solve(int currPosX, int currPosY) {
  42.         if (currPosX == finalPosX && currPosY == finalPosY) return 0;
  43.  
  44.         int ans = INF;
  45.  
  46.         for (int i = 0; i < dx.length; i++) {
  47.             int x = currPosX + dx[i], y = currPosY + dy[i];
  48.  
  49.             if (x <= 8 && y <= 8 && y >= 1 && x >= 1) {
  50.  
  51.                 if (!visited[x][y]) {
  52.                     visited[x][y] = true;
  53.                     ans = Math.min(ans, solve(x, y) + 1);
  54.                 }
  55.  
  56.                 else ans = Math.min(ans, memo[x][y] + 1);
  57.             }
  58.  
  59.         }
  60.  
  61.         memo[currPosX][currPosY] = ans;
  62.  
  63.         return ans;
  64.     }
  65. }
Add Comment
Please, Sign In to add comment