Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class Main {
- private static int[][] memo;
- private static int finalPosX;
- private static int finalPosY;
- private static boolean[][] visited;
- private static int[] dx = { 2, 2, -2, -2, 1, -1, -1, 1};
- private static int[] dy = { 1, -1, 1, -1, -2, 2, -2, 2};
- private static final int INF = 1<<20;
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- while (sc.hasNextLine()) {
- memo = new int[9][9];
- visited = new boolean[9][9];
- for (int i = 0; i < 9; i++)
- for (int j = 0; j < 9; j++)
- memo[i][j] = INF;
- String currPosString = sc.next();
- String finalPosString = sc.next();
- int currPosX = currPosString.charAt(0) - 'a' + 1;
- int currPosY = currPosString.charAt(1) - '0';
- finalPosX = finalPosString.charAt(0) - 'a' + 1;
- finalPosY = finalPosString.charAt(1) - '0';
- visited[currPosX][currPosY] = true;
- visited[finalPosX][finalPosY] = true;
- memo[finalPosX][finalPosY] = 0;
- //System.out.println(currPosX + " " + currPosY + " " + finalPosX + " " + finalPosY);
- System.out.printf("To get from %s to %s takes %d knight moves.\n", currPosString, finalPosString, solve(currPosX, currPosY));
- //System.out.println(memo[2][4]);
- }
- }
- private static int solve(int currPosX, int currPosY) {
- if (currPosX == finalPosX && currPosY == finalPosY) return 0;
- int ans = INF;
- for (int i = 0; i < dx.length; i++) {
- int x = currPosX + dx[i], y = currPosY + dy[i];
- if (x <= 8 && y <= 8 && y >= 1 && x >= 1) {
- if (!visited[x][y]) {
- visited[x][y] = true;
- ans = Math.min(ans, solve(x, y) + 1);
- }
- else ans = Math.min(ans, memo[x][y] + 1);
- }
- }
- memo[currPosX][currPosY] = ans;
- return ans;
- }
- }
Add Comment
Please, Sign In to add comment