Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //package May7;
- import java.util.*;
- public class E_COPY {
- public static void main(String[] args) {
- Scanner in = new Scanner(System.in);
- int n = in.nextInt();
- int m = in.nextInt();
- int[][] a = new int[n][m];
- int[][] d = new int[n][m];
- for (int i = 0; i < n; i++) {
- Arrays.fill(d[i], -1 );
- }
- Deque<Integer> q = new ArrayDeque<>();
- q.addLast(0);
- d[0][0] = 0;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- a[i][j] = in.nextInt();
- }
- }
- while (!q.isEmpty()) {
- int ord = q.pollFirst();
- int y = ord / m;
- int x = ord % m;
- if (a[y][x] == 2) {
- continue;
- }
- if (y > 0 && a[y - 1][x] != 1) {
- int y1 = y;
- while (y1 > 0 && a[y1 - 1][x] != 1 && a[y1][x] != 2) {
- y1--;
- }
- if (d[y1][x] == -1) {
- int ord1 = y1 * m + x;
- q.addLast(ord1);
- d[y1][x] = d[y][x] + 1;
- }
- }
- if (y < n - 1 && a[y + 1][x] != 1) {
- int y1 = y;
- while (y1 < n - 1 && a[y1 + 1][x] != 1 && a[y1][x] != 2) {
- y1++;
- }
- if (d[y1][x] == -1) {
- int ord1 = y1 * m + x;
- q.addLast(ord1);
- d[y1][x] = d[y][x] + 1;
- }
- }
- if (x > 0 && a[y][x - 1] != 1) {
- int x1 = x;
- while (x1 > 0 && a[y][x1 - 1] != 1 && a[y][x1] != 2) {
- x1--;
- }
- if (d[y][x1] == -1) {
- int ord1 = y * m + x1;
- q.addLast(ord1);
- d[y][x1] = d[y][x] + 1;
- }
- }
- if (x < m - 1 && a[y][x + 1] != 1) {
- int x1 = x;
- while (x1 < m - 1 && a[y][x1 + 1] != 1 && a[y][x1] != 2) {
- x1++;
- }
- if (d[y][x1] == -1) {
- int ord1 = y * m + x1;
- q.addLast(ord1);
- d[y][x1] = d[y][x] + 1;
- }
- }
- }
- int ans = Integer.MAX_VALUE;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- // System.out.print(d[i][j] + "\t ");
- if (a[i][j] == 2 && d[i][j] != -1) {
- ans = Math.min(d[i][j], ans);
- }
- }
- // System.out.println();
- }
- // System.out.println();
- System.out.println(ans);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement