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();
- char[][] board = new char[n][m];
- for (int a = 0; a < n; a++) {
- String s = sc.next();
- for (int b = 0; b < m; b++) {
- board[a][b] = s.charAt(b);
- }
- }
- int answer = 11;
- int count = 1;
- answer = Math.min(answer, left(count, board, n, m));
- answer = Math.min(answer, right(count, board, n, m));
- answer = Math.min(answer, up(count, board, n, m));
- answer = Math.min(answer, down(count, board, n, m));
- if (answer == 11) {
- System.out.println(-1);
- } else {
- System.out.println(answer);
- }
- sc.close();
- }
- private static int up(int count, char[][] board, int n, int m) {
- char[][] newboard = new char[n][m];
- for (int f = 0; f < n; f++) {
- for (int g = 0; g < m; g++) {
- newboard[f][g] = board[f][g];
- }
- }
- boolean candidate = false;
- if (count == 11) {
- return count;
- } else {
- for (int a = 1; a < n - 1; a++) {
- for (int b = 1; b < m - 1; b++) {
- if (newboard[a][b] == 'R' || newboard[a][b] == 'B') {
- char ch = newboard[a][b];
- for (int c = a - 1; c >= 0; c--) {
- if (newboard[c][b] == 'O') {
- if (ch == 'B') {
- return 11;
- } else {
- candidate = true;
- newboard[a][b] = '.';
- break;
- }
- } else if (newboard[c][b] != '.') {
- char temp = newboard[c + 1][b];
- newboard[c + 1][b] = newboard[a][b];
- newboard[a][b] = temp;
- break;
- }
- }
- }
- }
- }
- }
- if (candidate) {
- return count;
- } else {
- return Math.min(left(count + 1, newboard, n, m), right(count + 1, newboard, n, m));
- }
- }
- private static int down(int count, char[][] board, int n, int m) {
- char[][] newboard = new char[n][m];
- for (int f = 0; f < n; f++) {
- for (int g = 0; g < m; g++) {
- newboard[f][g] = board[f][g];
- }
- }
- boolean candidate = false;
- if (count == 11) {
- return count;
- } else {
- for (int a = n - 2; a > 0; a--) {
- for (int b = 1; b < m - 1; b++) {
- if (newboard[a][b] == 'R' || newboard[a][b] == 'B') {
- char ch = newboard[a][b];
- for (int c = a + 1; c < n; c++) {
- if (newboard[c][b] == 'O') {
- if (ch == 'B') {
- return 11;
- } else {
- candidate = true;
- newboard[a][b] = '.';
- break;
- }
- } else if (newboard[c][b] != '.') {
- char temp = newboard[c - 1][b];
- newboard[c - 1][b] = newboard[a][b];
- newboard[a][b] = temp;
- break;
- }
- }
- }
- }
- }
- }
- if (candidate) {
- return count;
- } else {
- return Math.min(left(count + 1, newboard, n, m), right(count + 1, newboard, n, m));
- }
- }
- private static int right(int count, char[][] board, int n, int m) {
- char[][] newboard = new char[n][m];
- for (int f = 0; f < n; f++) {
- for (int g = 0; g < m; g++) {
- newboard[f][g] = board[f][g];
- }
- }
- boolean candidate = false;
- if (count == 11) {
- return count;
- } else {
- for (int a = 1; a < n - 1; a++) {
- for (int b = m - 2; b > 0; b--) {
- if (newboard[a][b] == 'R' || newboard[a][b] == 'B') {
- char ch = newboard[a][b];
- for (int c = b + 1; c < m; c++) {
- if (newboard[a][c] == 'O') {
- if (ch == 'B') {
- return 11;
- } else {
- candidate = true;
- newboard[a][b] = '.';
- break;
- }
- } else if (newboard[a][c] != '.') {
- char temp = newboard[a][c - 1];
- newboard[a][c - 1] = newboard[a][b];
- newboard[a][b] = temp;
- break;
- }
- }
- }
- }
- }
- }
- if (candidate) {
- return count;
- } else {
- return Math.min(up(count + 1, newboard, n, m), down(count + 1, newboard, n, m));
- }
- }
- private static int left(int count, char[][] board, int n, int m) {
- char[][] newboard = new char[n][m];
- for (int f = 0; f < n; f++) {
- for (int g = 0; g < m; g++) {
- newboard[f][g] = board[f][g];
- }
- }
- boolean candidate = false;
- if (count == 11) {
- return count;
- } else {
- for (int a = 1; a < n - 1; a++) {
- for (int b = 1; b < m - 1; b++) {
- if (newboard[a][b] == 'R' || newboard[a][b] == 'B') {
- char ch = newboard[a][b];
- for (int c = b - 1; c >= 0; c--) {
- if (newboard[a][c] == 'O') {
- if (ch == 'B') {
- return 11;
- } else {
- candidate = true;
- newboard[a][b] = '.';
- break;
- }
- } else if (newboard[a][c] != '.') {
- char temp = newboard[a][c + 1];
- newboard[a][c + 1] = newboard[a][b];
- newboard[a][b] = temp;
- break;
- }
- }
- }
- }
- }
- }
- if (candidate) {
- return count;
- } else {
- return Math.min(up(count + 1, newboard, n, m), down(count + 1, newboard, n, m));
- }
- }
- }
Add Comment
Please, Sign In to add comment