Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayDeque;
- import java.util.Scanner;
- /**
- * Created by U_LIVT35403 on 21.05.2016.
- */
- public class Solution1 {
- public static void main(String args[]) {
- //задача поиск кратчайшего пути для этого используем алгоритм поиска в ширину
- //как только находим путь, поиск закончен
- int n; // размер доски
- int x1=0, x2=0, y1, y2; // координаты начала и конца
- int x, y, dist;
- int wayDist = 0;
- Pair point;
- n=8;
- char x1char;
- char x2char;
- //ввод
- Scanner sc = new Scanner(System.in);
- x1char = sc.next().charAt(0);
- y1 = sc.nextInt();
- x2char = sc.next().charAt(0);
- y2 = sc.nextInt();
- switch (x1char) {
- case 'a': x1=1;
- break;
- case 'b':x1=2;
- break;
- case 'c':x1=3;
- break;
- case 'd':x1=4;
- break;
- case 'e':x1=5;
- break;
- case 'f':x1=6;
- break;
- case 'g':x1=7;
- break;
- case 'h':x1=8;
- break;
- }
- switch (x2char) {
- case 'a': x2=1;
- break;
- case 'b':x2=2;
- break;
- case 'c':x2=3;
- break;
- case 'd':x2=4;
- break;
- case 'e':x2=5;
- break;
- case 'f':x2=6;
- break;
- case 'g':x2=7;
- break;
- case 'h':x2=8;
- break;
- }
- ArrayDeque<Pair> q = new ArrayDeque<Pair>();//здесь храним порядок обхода доски
- int matrix[][] = new int[n][n];// шахматное поле, будем помечать пройденные точки 1, не пройденные 0
- int d[][] = new int[n][n]; // ходов до точки
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- d[i][j] = -1;
- d[x1 - 1][y1 - 1] = 0;
- matrix[x1 - 1][y1 - 1] = 1;
- q.offer(new Pair(x1, y1));
- // поиск пути BFS
- while (!q.isEmpty()) {
- point = q.poll();
- x = point.getX();
- y = point.getY();
- dist = d[x - 1][y - 1];
- if (x + 2 <= n) {
- if (y - 1 >= 1)
- if (matrix[x + 2 - 1][y - 1 - 1] == 0) {
- q.offer(new Pair(x + 2, y - 1));//добавить в очередь
- matrix[x + 2 - 1][y - 1 - 1] = 1;// пометка на матрице
- d[x + 2 - 1][y - 1 - 1] = dist + 1;// пометить в массиве расстояний
- }
- if (y + 1 <= n)
- if (matrix[x + 2 - 1][y + 1 - 1] == 0) {
- q.offer(new Pair(x + 2, y + 1));
- matrix[x + 2 - 1][y + 1 - 1] = 1;
- d[x + 2 - 1][y + 1 - 1] = dist + 1;
- }
- }
- if (x - 2 >= 1) {
- if (y - 1 >= 1)
- if (matrix[x - 2 - 1][y - 1 - 1] == 0) {
- q.offer(new Pair(x - 2, y - 1));
- matrix[x - 2 - 1][y - 1 - 1] = 1;
- d[x - 2 - 1][y - 1 - 1] = dist + 1;
- }
- if (y + 1 <= n)
- if (matrix[x - 2 - 1][y + 1 - 1] == 0) {
- q.offer(new Pair(x - 2, y + 1));
- matrix[x - 2 - 1][y + 1 - 1] = 1;
- d[x - 2 - 1][y + 1 - 1] = dist + 1;
- }
- }
- if (y + 2 <= n) {
- if (x - 1 >= 1)
- if (matrix[x - 1 - 1][y + 2 - 1] == 0) {
- q.offer(new Pair(x - 1, y + 2));
- matrix[x - 1 - 1][y + 2 - 1] = 1;
- d[x - 1 - 1][y + 2 - 1] = dist + 1;
- }
- if (x + 1 <= n)
- if (matrix[x + 1 - 1][y + 2 - 1] == 0) {
- q.offer(new Pair(x + 1, y + 2));
- matrix[x + 1 - 1][y + 2 - 1] = 1;
- d[x + 1 - 1][y + 2 - 1] = dist + 1;
- }
- }
- if (y - 2 >= 1) {
- if (x - 1 >= 1)
- if (matrix[x - 1 - 1][y - 2 - 1] == 0) {
- q.offer(new Pair(x - 1, y - 2));
- matrix[x - 1 - 1][y - 2 - 1] = 1;
- d[x - 1 - 1][y - 2 - 1] = dist + 1;
- }
- if (x + 1 <= n)
- if (matrix[x + 1 - 1][y - 2 - 1] == 0) {
- matrix[x + 1 - 1][y - 2 - 1] = 1;
- q.offer(new Pair(x + 1, y - 2));
- d[x + 1 - 1][y - 2 - 1] = dist + 1;
- }
- }
- }
- // массив расстояний до точек
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++)
- System.out.print(d[i][j] + " ");
- System.out.println();
- }
- System.out.println();
- System.out.println();
- //РАСЧЕТЫ ДЛЯ 2 коня
- int matrix2[][] = new int[n][n];// шахматное поле, будем помечать пройденные точки 1, не пройденные 0
- int d2[][] = new int[n][n]; // ходов до точки
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- d2[i][j] = -1;
- d2[x2 - 1][y2 - 1] = 0;
- matrix2[x2 - 1][y2 - 1] = 1;
- q.offer(new Pair(x2, y2));
- // поиск пути BFS
- while (!q.isEmpty()) {
- point = q.poll();
- x = point.getX();
- y = point.getY();
- dist = d2[x - 1][y - 1];
- if (x + 2 <= n) {
- if (y - 1 >= 1)
- if (matrix2[x + 2 - 1][y - 1 - 1] == 0) {
- q.offer(new Pair(x + 2, y - 1));//добавить в очередь
- matrix2[x + 2 - 1][y - 1 - 1] = 1;// пометка на матрице
- d2[x + 2 - 1][y - 1 - 1] = dist + 1;// пометить в массиве расстояний
- }
- if (y + 1 <= n)
- if (matrix2[x + 2 - 1][y + 1 - 1] == 0) {
- q.offer(new Pair(x + 2, y + 1));
- matrix2[x + 2 - 1][y + 1 - 1] = 1;
- d2[x + 2 - 1][y + 1 - 1] = dist + 1;
- }
- }
- if (x - 2 >= 1) {
- if (y - 1 >= 1)
- if (matrix2[x - 2 - 1][y - 1 - 1] == 0) {
- q.offer(new Pair(x - 2, y - 1));
- matrix2[x - 2 - 1][y - 1 - 1] = 1;
- d2[x - 2 - 1][y - 1 - 1] = dist + 1;
- }
- if (y + 1 <= n)
- if (matrix2[x - 2 - 1][y + 1 - 1] == 0) {
- q.offer(new Pair(x - 2, y + 1));
- matrix2[x - 2 - 1][y + 1 - 1] = 1;
- d2[x - 2 - 1][y + 1 - 1] = dist + 1;
- }
- }
- if (y + 2 <= n) {
- if (x - 1 >= 1)
- if (matrix2[x - 1 - 1][y + 2 - 1] == 0) {
- q.offer(new Pair(x - 1, y + 2));
- matrix2[x - 1 - 1][y + 2 - 1] = 1;
- d2[x - 1 - 1][y + 2 - 1] = dist + 1;
- }
- if (x + 1 <= n)
- if (matrix2[x + 1 - 1][y + 2 - 1] == 0) {
- q.offer(new Pair(x + 1, y + 2));
- matrix2[x + 1 - 1][y + 2 - 1] = 1;
- d2[x + 1 - 1][y + 2 - 1] = dist + 1;
- }
- }
- if (y - 2 >= 1) {
- if (x - 1 >= 1)
- if (matrix2[x - 1 - 1][y - 2 - 1] == 0) {
- q.offer(new Pair(x - 1, y - 2));
- matrix2[x - 1 - 1][y - 2 - 1] = 1;
- d2[x - 1 - 1][y - 2 - 1] = dist + 1;
- }
- if (x + 1 <= n)
- if (matrix2[x + 1 - 1][y - 2 - 1] == 0) {
- matrix2[x + 1 - 1][y - 2 - 1] = 1;
- q.offer(new Pair(x + 1, y - 2));
- d2[x + 1 - 1][y - 2 - 1] = dist + 1;
- }
- }
- }
- // массив расстояний до точек
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++)
- System.out.print(d2[i][j] + " ");
- System.out.println();
- }
- System.out.println();
- System.out.println();
- //найти самую быструю встречу
- int distMin=Integer.MAX_VALUE;
- for (int i=0;i<n;i++)
- for (int j=0;j<n;j++)
- {
- if (d[i][j]>=d2[i][j]) {
- if (d[i][j]<distMin) distMin=d[i][j];
- }
- else {
- if (d2[i][j]<distMin) distMin=d2[i][j];
- }
- }
- System.out.println(distMin);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement