Advertisement
mark79

Java Advanced - The Matrix

Sep 30th, 2019
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.75 KB | None | 0 0
  1. import java.util.ArrayDeque;
  2. import java.util.Arrays;
  3. import java.util.Scanner;
  4.  
  5. public class TheMatrix {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8.  
  9.         int[] ints = Arrays.stream(scanner.nextLine().split("\\s")).mapToInt(Integer::parseInt).toArray();
  10.         int rows = ints[0];
  11.         int cols = ints[1];
  12.  
  13.         char[][] matrix = new char[rows][cols];
  14.         for (int i = 0; i < rows; i++) {
  15.             String[] strings = scanner.nextLine().split("\\s");
  16.             for (int j = 0; j < cols; j++) {
  17.                 matrix[i][j] = strings[j].charAt(0);
  18.             }
  19.         }
  20.  
  21.         char fillChar = scanner.nextLine().charAt(0);
  22.         ints = Arrays.stream(scanner.nextLine().split("\\s")).mapToInt(Integer::parseInt).toArray();
  23.         int startRow = ints[0];
  24.         int startCol = ints[1];
  25.         char startChar = matrix[startRow][startCol];
  26.  
  27.         ArrayDeque<String> stack = new ArrayDeque<>();
  28.         stack.push(startRow + " " + startCol);
  29.         while (!stack.isEmpty()) {
  30.             String node = stack.pop();
  31.             ints = Arrays.stream(node.split("\\s")).mapToInt(Integer::parseInt).toArray();
  32.             startRow = ints[0];
  33.             startCol = ints[1];
  34.             matrix[startRow][startCol] = fillChar;
  35.             if (canReachUp(matrix, startRow - 1, startCol, startChar)) {
  36.                 stack.push(startRow - 1 + " " + startCol);
  37.             }
  38.             if (canReachDown(matrix, startRow + 1, startCol, startChar)) {
  39.                 stack.push(startRow + 1 + " " + startCol);
  40.             }
  41.             if (canReachLeft(matrix, startRow, startCol - 1, startChar)) {
  42.                 stack.push(startRow + " " + (startCol - 1));
  43.             }
  44.             if (canReachRight(matrix, startRow, startCol + 1, startChar)) {
  45.                 stack.push(startRow + " " + (startCol + 1));
  46.             }
  47.         }
  48.  
  49.         for (char[] chars : matrix) {
  50.             for (char aChar : chars) {
  51.                 System.out.print(aChar);
  52.             }
  53.             System.out.println();
  54.         }
  55.     }
  56.  
  57.     private static boolean canReachUp(char[][] matrix, int row, int col, char startChar) {
  58.         return row >= 0 && matrix[row][col] == startChar;
  59.     }
  60.  
  61.     private static boolean canReachDown(char[][] matrix, int row, int col, char startChar) {
  62.         return row < matrix.length && matrix[row][col] == startChar;
  63.     }
  64.  
  65.     private static boolean canReachLeft(char[][] matrix, int row, int col, char startChar) {
  66.         return col >= 0 && matrix[row][col] == startChar;
  67.     }
  68.  
  69.     private static boolean canReachRight(char[][] matrix, int row, int col, char startChar) {
  70.         return col < matrix[row].length && matrix[row][col] == startChar;
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement