MazeSolver class
unknown
java
a year ago
2.6 kB
48
Indexable
import java.util.Scanner; public class MazeSolver { private Scanner mazesc; private String filename; private boolean pathExist = false; private Position posStart; private Position posEnd; private int[][] maze; public MazeSolver(String filename, int startCol, int startRow, int endCol, int endRow){ this.filename = filename; try{ this.mazesc = new Scanner(MazeSolver.class.getResourceAsStream(this.filename)); int m = mazesc.nextInt(); int n = mazesc.nextInt(); this.maze = new int[m][n]; for(int i = 0;i<m;i++){ for(int j = 0;j<n;j++){ maze[i][j] = mazesc.nextInt(); } } } catch (NullPointerException e){ System.out.println("Input file doesn't exist"); } this.posStart = new Position(startRow, startCol); this.posEnd = new Position(endRow, endCol); } public boolean isValidPosition(int row, int col){ if(row < 0 || row >= this.maze.length || col < 0 || col >= this.maze[0].length || this.maze[row][col] == 1){ return false; } else return true; } public void findPath(int row, int col) { if(!isValidPosition(row, col)){ return; // invalid position } else if(this.maze[row][col] == 2){ return; // already visited } else if(row == this.posEnd.getRow() && col == this.posEnd.getCol()){ pathExist = true; this.maze[row][col] = 2; printMaze(); } else { this.maze[row][col] = 2; if(isValidPosition(row+1,col)){ findPath(row + 1, col); } if(isValidPosition(row-1,col)){ findPath(row - 1, col); } if(isValidPosition(row, col+1)){ findPath(row, col + 1); } if(isValidPosition(row, col-1)){ findPath(row, col - 1); } this.maze[row][col] = 0; // backtrack } } public void solve(){ findPath(posStart.getRow(), posStart.getCol()); if(!pathExist){ System.out.println("No path exists from start to end"); } } public void printMaze(){ try { for(int i = 0;i < this.maze.length;i++){ for(int j = 0;j<this.maze[i].length;j++){ System.out.print(this.maze[i][j] + " "); } System.out.println(); } }catch (NullPointerException e){} } }
Editor is loading...
Leave a Comment