Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.70 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4.  
  5. public class MatrixPasser {
  6.     // region Fields
  7.     private int[][] matrix;
  8.  
  9.     private int[] currentCoordinates;
  10.     private final int[] finalCoordinates;
  11.  
  12.     private List<int[]> passedMoves;
  13.     private List<int[]> deadEnds;
  14.  
  15.     private int mark;
  16.     // endregion
  17.  
  18.     public MatrixPasser(int[][] matrix, int initialLine, int initialCell, int finalLine, int finalCell) {
  19.         this.matrix = matrix;
  20.  
  21.         currentCoordinates = new int[]{initialLine - 1, initialCell - 1};
  22.         finalCoordinates = new int[]{finalLine - 1, finalCell - 1};
  23.  
  24.         passedMoves = new ArrayList<>();
  25.         deadEnds = new ArrayList<>();
  26.  
  27.         mark = 2;
  28.     }
  29.  
  30.     public boolean isPassed() {
  31.         return matrix[finalCoordinates[0]][finalCoordinates[1]] != 0;
  32.     }
  33.  
  34.     public boolean isPassableForCoordinates() {
  35.         return getMoves(currentCoordinates).length != 0;
  36.     }
  37.  
  38.     public boolean isContainsInPassedMoves() {
  39.         return passedMoves.contains(currentCoordinates);
  40.     }
  41.  
  42.     public void addToPassedMoves() {
  43.         passedMoves.add(currentCoordinates);
  44.     }
  45.  
  46.     public void mark() {
  47.         matrix[currentCoordinates[0]][currentCoordinates[1]] = mark++;
  48.     }
  49.  
  50.     public int[][] getMoves() {
  51.         List<int[]> possibleMoves = new ArrayList<>();
  52.  
  53.         if (currentCoordinates[0] > 0 && matrix[currentCoordinates[0] - 1][currentCoordinates[1]] != 1)
  54.             possibleMoves.add(new int[] {currentCoordinates[0] - 1, currentCoordinates[1]});
  55.  
  56.         if (currentCoordinates[0] < matrix.length - 1 && matrix[currentCoordinates[0] + 1][currentCoordinates[1]] != 1)
  57.             possibleMoves.add(new int[] {currentCoordinates[0] + 1, currentCoordinates[1]});
  58.  
  59.         if (currentCoordinates[1] > 0 && matrix[currentCoordinates[0]][currentCoordinates[1] - 1] != 1)
  60.             possibleMoves.add(new int[] {currentCoordinates[0], currentCoordinates[1] - 1});
  61.  
  62.         if (currentCoordinates[1] < matrix[currentCoordinates[0]].length - 1 && matrix[currentCoordinates[0]][currentCoordinates[1] + 1] != 1)
  63.             possibleMoves.add(new int[] {currentCoordinates[0], currentCoordinates[1] + 1});
  64.  
  65.         return possibleMoves.toArray(new int[][] {});
  66.     }
  67.  
  68.     public int[][] getMoves(int[] coordinates) {
  69.         List<int[]> possibleMoves = new ArrayList<>();
  70.  
  71.         if (coordinates[0] > 0 && matrix[coordinates[0] - 1][coordinates[1]] != 1)
  72.             possibleMoves.add(new int[] {coordinates[0] - 1, coordinates[1]});
  73.  
  74.         if (coordinates[0] < matrix.length - 1 && matrix[coordinates[0] + 1][coordinates[1]] != 1)
  75.             possibleMoves.add(new int[] {coordinates[0] + 1, coordinates[1]});
  76.  
  77.         if (coordinates[1] > 0 && matrix[coordinates[0]][coordinates[1] - 1] != 1)
  78.             possibleMoves.add(new int[] {coordinates[0], coordinates[1] - 1});
  79.  
  80.         if (coordinates[1] < matrix[coordinates[0]].length - 1 && matrix[coordinates[0]][coordinates[1] + 1] != 1)
  81.             possibleMoves.add(new int[] {coordinates[0], coordinates[1] + 1});
  82.  
  83.         return possibleMoves.toArray(new int[][] {});
  84.     }
  85.  
  86.     public boolean isDeadEnd(int[] coordinates) {
  87.         if (passedMoves.size() > 0 && Arrays.stream(getMoves(coordinates))
  88.                 .noneMatch(move -> move != passedMoves.get(passedMoves.size() - 1))) {
  89.             deadEnds.add(coordinates);
  90.             return true;
  91.         }
  92.  
  93.         return false;
  94.     }
  95.  
  96.     public void makeMove(int[] coordinates) {
  97.         currentCoordinates = coordinates;
  98.     }
  99.  
  100.     public int[] getCurrentCoordinates() {
  101.         return currentCoordinates;
  102.     }
  103.  
  104.     public int[][] getMatrix() {
  105.         return matrix;
  106.     }
  107.  
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement