Advertisement
vov44k

Untitled

Mar 17th, 2023
589
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.83 KB | None | 0 0
  1. //package May7;
  2.  
  3. import java.util.*;
  4.  
  5. public class E_COPY {
  6.  
  7.     public static void main(String[] args) {
  8.         Scanner in = new Scanner(System.in);
  9.  
  10.         int n = in.nextInt();
  11.         int m = in.nextInt();
  12.         int[][] a = new int[n][m];
  13.         int[][] d = new int[n][m];
  14.  
  15.         for (int i = 0; i < n; i++) {
  16.             Arrays.fill(d[i], -1 );
  17.         }
  18.  
  19.         Deque<Integer> q = new ArrayDeque<>();
  20.  
  21.         q.addLast(0);
  22.         d[0][0] = 0;
  23.  
  24.         for (int i = 0; i < n; i++) {
  25.             for (int j = 0; j < m; j++) {
  26.                 a[i][j] = in.nextInt();
  27.             }
  28.         }
  29.  
  30.         while (!q.isEmpty()) {
  31.             int ord = q.pollFirst();
  32.             int y = ord / m;
  33.             int x = ord % m;
  34.  
  35.             if (a[y][x] == 2) {
  36.                 continue;
  37.             }
  38.  
  39.             if (y > 0 && a[y - 1][x] != 1) {
  40.                 int y1 = y;
  41.  
  42.                 while (y1 > 0 && a[y1 - 1][x] != 1 && a[y1][x] != 2) {
  43.                     y1--;
  44.                 }
  45.                 if (d[y1][x] == -1) {
  46.                     int ord1 = y1 * m + x;
  47.                     q.addLast(ord1);
  48.                     d[y1][x] = d[y][x] + 1;
  49.                 }
  50.             }
  51.  
  52.             if (y < n - 1 && a[y + 1][x] != 1) {
  53.                 int y1 = y;
  54.  
  55.                 while (y1 < n - 1 && a[y1 + 1][x] != 1 && a[y1][x] != 2) {
  56.                     y1++;
  57.                 }
  58.                 if (d[y1][x] == -1) {
  59.                     int ord1 = y1 * m + x;
  60.                     q.addLast(ord1);
  61.                     d[y1][x] = d[y][x] + 1;
  62.                 }
  63.             }
  64.  
  65.             if (x > 0 && a[y][x - 1] != 1) {
  66.                 int x1 = x;
  67.  
  68.                 while (x1 > 0 && a[y][x1 - 1] != 1 && a[y][x1] != 2) {
  69.                     x1--;
  70.                 }
  71.                 if (d[y][x1] == -1) {
  72.                     int ord1 = y * m + x1;
  73.                     q.addLast(ord1);
  74.                     d[y][x1] = d[y][x] + 1;
  75.                 }
  76.             }
  77.  
  78.             if (x < m - 1 && a[y][x + 1] != 1) {
  79.                 int x1 = x;
  80.  
  81.                 while (x1 < m - 1 && a[y][x1 + 1] != 1 && a[y][x1] != 2) {
  82.                     x1++;
  83.                 }
  84.                 if (d[y][x1] == -1) {
  85.                     int ord1 = y * m + x1;
  86.                     q.addLast(ord1);
  87.                     d[y][x1] = d[y][x] + 1;
  88.                 }
  89.             }
  90.         }
  91.  
  92.         int ans = Integer.MAX_VALUE;
  93.  
  94.         for (int i = 0; i < n; i++) {
  95.             for (int j = 0; j < m; j++) {
  96. //                System.out.print(d[i][j] + "\t ");
  97.                 if (a[i][j] == 2 && d[i][j] != -1) {
  98.                     ans = Math.min(d[i][j], ans);
  99.                 }
  100.             }
  101.  
  102. //            System.out.println();
  103.         }
  104. //        System.out.println();
  105.         System.out.println(ans);
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement