Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int m = sc.nextInt();
- int r = sc.nextInt();
- int c = sc.nextInt();
- int d = sc.nextInt();
- int[][] map = new int[n][m];
- for (int z = 0; z < n; z++) {
- for (int y = 0; y < m; y++) {
- map[z][y] = sc.nextInt();
- }
- }
- int count = 0;
- one(r, c, d, count, map, n, m);
- for (int z = 0; z < n; z++) {
- for (int y = 0; y < m; y++) {
- if (map[z][y] == 2) {
- count++;
- }
- }
- }
- System.out.println(count);
- sc.close();
- }
- private static void one(int r, int c, int d, int count, int[][] map, int n, int m) {
- map[r][c] = 2;
- count++;
- two(r, c, d, count, map, n, m);
- }
- private static void two(int r, int c, int d, int count, int[][] map, int n, int m) {
- if ((c + 1 >= m || map[r][c + 1] != 0) && (r + 1 >= n || map[r + 1][c] != 0)
- && (c - 1 < 0 || map[r][c - 1] != 0) && (r - 1 < 0 || map[r - 1][c] != 0)) {
- if (d == 0) {
- if (r + 1 >= n || map[r + 1][c] == 1) {
- return;
- } else {
- two(r + 1, c, d, count, map, n, m);
- }
- }
- if (d == 1) {
- if (c - 1 < 0 || map[r][c - 1] == 1) {
- return;
- } else {
- two(r, c - 1, d, count, map, n, m);
- }
- }
- if (d == 2) {
- if (r - 1 < 0 || map[r - 1][c] == 1) {
- return;
- } else {
- two(r - 1, c, d, count, map, n, m);
- }
- }
- if (d == 3) {
- if (c + 1 > m || map[r][c + 1] == 1) {
- return;
- } else {
- two(r, c + 1, d, count, map, n, m);
- }
- }
- } else if (d == 0 && c - 1 >= 0 && map[r][c - 1] == 0) {
- one(r, c - 1, 3, count, map, n, m);
- } else if (d == 1 && r - 1 >= 0 && map[r - 1][c] == 0) {
- one(r - 1, c, 0, count, map, n, m);
- } else if (d == 2 && c + 1 < m && map[r][c + 1] == 0) {
- one(r, c + 1, 1, count, map, n, m);
- } else if (d == 3 && r + 1 < n && map[r + 1][c] == 0) {
- one(r + 1, c, 2, count, map, n, m);
- } else {
- two(r, c, (d - 1 + 4) % 4, count, map, n, m);
- }
- }
- }
Add Comment
Please, Sign In to add comment