Advertisement
SergeyPGUTI

11.2.4

May 21st, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.53 KB | None | 0 0
  1. import java.util.ArrayDeque;
  2. import java.util.Scanner;
  3.  
  4. /**
  5.  * Created by U_LIVT35403 on 21.05.2016.
  6.  */
  7. public class Solution1 {
  8.     public static void main(String args[]) {
  9.         //задача поиск кратчайшего пути  для этого используем алгоритм поиска в ширину
  10.         //как только находим путь, поиск закончен
  11.         int n; // размер доски
  12.         int x1=0, x2=0, y1, y2; // координаты начала и конца
  13.         int x, y, dist;
  14.         int wayDist = 0;
  15.         Pair point;
  16.         n=8;
  17.         char x1char;
  18.         char x2char;
  19.  
  20.         //ввод
  21.         Scanner sc = new Scanner(System.in);
  22.         x1char = sc.next().charAt(0);
  23.         y1 = sc.nextInt();
  24.         x2char = sc.next().charAt(0);
  25.         y2 = sc.nextInt();
  26.  
  27.  
  28.         switch (x1char) {
  29.             case 'a': x1=1;
  30.                     break;
  31.             case 'b':x1=2;
  32.                 break;
  33.             case 'c':x1=3;
  34.                 break;
  35.             case 'd':x1=4;
  36.                 break;
  37.             case 'e':x1=5;
  38.                 break;
  39.             case 'f':x1=6;
  40.                 break;
  41.             case 'g':x1=7;
  42.                 break;
  43.             case 'h':x1=8;
  44.                 break;
  45.         }
  46.  
  47.         switch (x2char) {
  48.             case 'a': x2=1;
  49.                 break;
  50.             case 'b':x2=2;
  51.                 break;
  52.             case 'c':x2=3;
  53.                 break;
  54.             case 'd':x2=4;
  55.                 break;
  56.             case 'e':x2=5;
  57.                 break;
  58.             case 'f':x2=6;
  59.                 break;
  60.             case 'g':x2=7;
  61.                 break;
  62.             case 'h':x2=8;
  63.                 break;
  64.         }
  65.  
  66.  
  67.  
  68.         ArrayDeque<Pair> q = new ArrayDeque<Pair>();//здесь храним порядок обхода доски
  69.         int matrix[][] = new int[n][n];// шахматное поле, будем помечать пройденные точки 1, не пройденные 0
  70.         int d[][] = new int[n][n]; // ходов до точки
  71.  
  72.         for (int i = 0; i < n; i++)
  73.             for (int j = 0; j < n; j++)
  74.                 d[i][j] = -1;
  75.  
  76.         d[x1 - 1][y1 - 1] = 0;
  77.         matrix[x1 - 1][y1 - 1] = 1;
  78.         q.offer(new Pair(x1, y1));
  79.  
  80.         // поиск пути BFS
  81.         while (!q.isEmpty()) {
  82.             point = q.poll();
  83.             x = point.getX();
  84.             y = point.getY();
  85.             dist = d[x - 1][y - 1];
  86.  
  87.  
  88.             if (x + 2 <= n) {
  89.                 if (y - 1 >= 1)
  90.                     if (matrix[x + 2 - 1][y - 1 - 1] == 0) {
  91.                         q.offer(new Pair(x + 2, y - 1));//добавить в очередь
  92.                         matrix[x + 2 - 1][y - 1 - 1] = 1;// пометка на матрице
  93.                         d[x + 2 - 1][y - 1 - 1] = dist + 1;// пометить в массиве расстояний
  94.                     }
  95.                 if (y + 1 <= n)
  96.                     if (matrix[x + 2 - 1][y + 1 - 1] == 0) {
  97.                         q.offer(new Pair(x + 2, y + 1));
  98.                         matrix[x + 2 - 1][y + 1 - 1] = 1;
  99.                         d[x + 2 - 1][y + 1 - 1] = dist + 1;
  100.                     }
  101.             }
  102.             if (x - 2 >= 1) {
  103.                 if (y - 1 >= 1)
  104.                     if (matrix[x - 2 - 1][y - 1 - 1] == 0) {
  105.                         q.offer(new Pair(x - 2, y - 1));
  106.                         matrix[x - 2 - 1][y - 1 - 1] = 1;
  107.                         d[x - 2 - 1][y - 1 - 1] = dist + 1;
  108.                     }
  109.                 if (y + 1 <= n)
  110.                     if (matrix[x - 2 - 1][y + 1 - 1] == 0) {
  111.                         q.offer(new Pair(x - 2, y + 1));
  112.                         matrix[x - 2 - 1][y + 1 - 1] = 1;
  113.                         d[x - 2 - 1][y + 1 - 1] = dist + 1;
  114.                     }
  115.             }
  116.             if (y + 2 <= n) {
  117.                 if (x - 1 >= 1)
  118.                     if (matrix[x - 1 - 1][y + 2 - 1] == 0) {
  119.                         q.offer(new Pair(x - 1, y + 2));
  120.                         matrix[x - 1 - 1][y + 2 - 1] = 1;
  121.                         d[x - 1 - 1][y + 2 - 1] = dist + 1;
  122.                     }
  123.                 if (x + 1 <= n)
  124.                     if (matrix[x + 1 - 1][y + 2 - 1] == 0) {
  125.                         q.offer(new Pair(x + 1, y + 2));
  126.                         matrix[x + 1 - 1][y + 2 - 1] = 1;
  127.                         d[x + 1 - 1][y + 2 - 1] = dist + 1;
  128.                     }
  129.             }
  130.             if (y - 2 >= 1) {
  131.                 if (x - 1 >= 1)
  132.                     if (matrix[x - 1 - 1][y - 2 - 1] == 0) {
  133.                         q.offer(new Pair(x - 1, y - 2));
  134.                         matrix[x - 1 - 1][y - 2 - 1] = 1;
  135.                         d[x - 1 - 1][y - 2 - 1] = dist + 1;
  136.                     }
  137.                 if (x + 1 <= n)
  138.                     if (matrix[x + 1 - 1][y - 2 - 1] == 0) {
  139.                         matrix[x + 1 - 1][y - 2 - 1] = 1;
  140.                         q.offer(new Pair(x + 1, y - 2));
  141.                         d[x + 1 - 1][y - 2 - 1] = dist + 1;
  142.                     }
  143.             }
  144.         }
  145.         // массив расстояний до точек
  146.         for (int i = 0; i < n; i++) {
  147.             for (int j = 0; j < n; j++)
  148.                 System.out.print(d[i][j] + " ");
  149.             System.out.println();
  150.         }
  151.         System.out.println();
  152.         System.out.println();
  153.  
  154.         //РАСЧЕТЫ ДЛЯ 2 коня
  155.         int matrix2[][] = new int[n][n];// шахматное поле, будем помечать пройденные точки 1, не пройденные 0
  156.         int d2[][] = new int[n][n]; // ходов до точки
  157.  
  158.         for (int i = 0; i < n; i++)
  159.             for (int j = 0; j < n; j++)
  160.                 d2[i][j] = -1;
  161.  
  162.         d2[x2 - 1][y2 - 1] = 0;
  163.         matrix2[x2 - 1][y2 - 1] = 1;
  164.         q.offer(new Pair(x2, y2));
  165.  
  166.         // поиск пути BFS
  167.         while (!q.isEmpty()) {
  168.             point = q.poll();
  169.             x = point.getX();
  170.             y = point.getY();
  171.             dist = d2[x - 1][y - 1];
  172.  
  173.  
  174.             if (x + 2 <= n) {
  175.                 if (y - 1 >= 1)
  176.                     if (matrix2[x + 2 - 1][y - 1 - 1] == 0) {
  177.                         q.offer(new Pair(x + 2, y - 1));//добавить в очередь
  178.                         matrix2[x + 2 - 1][y - 1 - 1] = 1;// пометка на матрице
  179.                         d2[x + 2 - 1][y - 1 - 1] = dist + 1;// пометить в массиве расстояний
  180.                     }
  181.                 if (y + 1 <= n)
  182.                     if (matrix2[x + 2 - 1][y + 1 - 1] == 0) {
  183.                         q.offer(new Pair(x + 2, y + 1));
  184.                         matrix2[x + 2 - 1][y + 1 - 1] = 1;
  185.                         d2[x + 2 - 1][y + 1 - 1] = dist + 1;
  186.                     }
  187.             }
  188.             if (x - 2 >= 1) {
  189.                 if (y - 1 >= 1)
  190.                     if (matrix2[x - 2 - 1][y - 1 - 1] == 0) {
  191.                         q.offer(new Pair(x - 2, y - 1));
  192.                         matrix2[x - 2 - 1][y - 1 - 1] = 1;
  193.                         d2[x - 2 - 1][y - 1 - 1] = dist + 1;
  194.                     }
  195.                 if (y + 1 <= n)
  196.                     if (matrix2[x - 2 - 1][y + 1 - 1] == 0) {
  197.                         q.offer(new Pair(x - 2, y + 1));
  198.                         matrix2[x - 2 - 1][y + 1 - 1] = 1;
  199.                         d2[x - 2 - 1][y + 1 - 1] = dist + 1;
  200.                     }
  201.             }
  202.             if (y + 2 <= n) {
  203.                 if (x - 1 >= 1)
  204.                     if (matrix2[x - 1 - 1][y + 2 - 1] == 0) {
  205.                         q.offer(new Pair(x - 1, y + 2));
  206.                         matrix2[x - 1 - 1][y + 2 - 1] = 1;
  207.                         d2[x - 1 - 1][y + 2 - 1] = dist + 1;
  208.                     }
  209.                 if (x + 1 <= n)
  210.                     if (matrix2[x + 1 - 1][y + 2 - 1] == 0) {
  211.                         q.offer(new Pair(x + 1, y + 2));
  212.                         matrix2[x + 1 - 1][y + 2 - 1] = 1;
  213.                         d2[x + 1 - 1][y + 2 - 1] = dist + 1;
  214.                     }
  215.             }
  216.             if (y - 2 >= 1) {
  217.                 if (x - 1 >= 1)
  218.                     if (matrix2[x - 1 - 1][y - 2 - 1] == 0) {
  219.                         q.offer(new Pair(x - 1, y - 2));
  220.                         matrix2[x - 1 - 1][y - 2 - 1] = 1;
  221.                         d2[x - 1 - 1][y - 2 - 1] = dist + 1;
  222.                     }
  223.                 if (x + 1 <= n)
  224.                     if (matrix2[x + 1 - 1][y - 2 - 1] == 0) {
  225.                         matrix2[x + 1 - 1][y - 2 - 1] = 1;
  226.                         q.offer(new Pair(x + 1, y - 2));
  227.                         d2[x + 1 - 1][y - 2 - 1] = dist + 1;
  228.                     }
  229.             }
  230.         }
  231.         // массив расстояний до точек
  232.         for (int i = 0; i < n; i++) {
  233.             for (int j = 0; j < n; j++)
  234.                 System.out.print(d2[i][j] + " ");
  235.             System.out.println();
  236.         }
  237.         System.out.println();
  238.         System.out.println();
  239.  
  240.         //найти самую быструю встречу
  241.  
  242.         int distMin=Integer.MAX_VALUE;
  243.         for (int i=0;i<n;i++)
  244.             for (int j=0;j<n;j++)
  245.             {
  246.                 if (d[i][j]>=d2[i][j]) {
  247.                     if (d[i][j]<distMin) distMin=d[i][j];
  248.                 }
  249.                 else {
  250.                     if (d2[i][j]<distMin) distMin=d2[i][j];
  251.                 }
  252.             }
  253.         System.out.println(distMin);
  254.     }
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement