Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package mazeproblem;
- import java.util.Scanner;
- /**
- *
- * @author Tintinmj
- */
- public class MazeProblem {
- public static int startI, startJ, goalI, goalJ;
- public static void main(String[] args) throws InterruptedException {
- Scanner in = new Scanner(System.in);
- printInfo();
- int dim = in.nextInt();
- char[][] maze = new char[dim][dim];
- inputMatrix(maze, dim, in);
- try {
- thinkProcess();
- } catch (InterruptedException ex) {
- System.out.println(" Abnormal termination check your comp man!!!");
- }
- boolean isSolved = mazeUtil(maze, startI, startJ);
- printResult(isSolved, maze, dim);
- }
- private static void printResult(boolean isSolved, char[][] maze, int dim) {
- maze[goalI][goalJ] = 'G';
- maze[startI][startJ] = 'S';
- print(maze, dim);
- if(isSolved) {
- System.out.println(" \ngoal reached :D");
- }
- else {
- System.out.println(" \ngoal can't be reached :(");
- }
- }
- public static void printInfo() throws InterruptedException {
- System.out.println("===== WELCOME TO MAZE SOLVER =====");
- System.out.println("===== By : TintinMj =====");
- System.out.println("===== LEGENDS =====");
- System.out.println(" G : Goal");
- System.out.println(" S : Source");
- System.out.println(" # : Obstacle");
- System.out.println(" . : Open Space");
- System.out.println(" + : path from source to goal");
- System.out.println(" \nSample input : ");
- System.out.println( "4 (dimension of maze)\n" +
- "....\n" +
- ".##.\n" +
- ".##.\n" +
- "G..S");
- thinkProcess();
- System.out.println(" \nSample output : ");
- System.out.println( "++++\n" +
- "+##+\n" +
- "+##+\n" +
- "G..S");
- System.out.println(" \nNow you try with something else :)");
- }
- private static void xwait(long time) throws InterruptedException {
- Thread.sleep(time);
- }
- private static void thinkProcess() throws InterruptedException {
- final long time = 900;
- System.out.print(" \nSolving maze .");
- xwait(time);
- System.out.print(".");
- xwait(time);
- System.out.print(".");
- xwait(time);
- System.out.println(".");
- }
- private static void inputMatrix(char [][]maze, int dim, Scanner in) {
- boolean startFound = false, goalFound = false;
- for(int i = 0; i < dim; i++) {
- String s = in.next();
- for(int j = 0; j < dim; j++) {
- char c = s.charAt(j);
- maze[i][j] = c;
- if(!startFound && c == 'S') {
- startI = i;
- startJ = j;
- startFound = true;
- }
- else if(!goalFound && c == 'G') {
- goalI = i;
- goalJ = j;
- goalFound = true;
- }
- }
- }
- }
- public static void print(char[][]maze, int dim) {
- System.out.println("\n=============\n");
- for(int i = 0; i < dim; i++) {
- for(int j = 0; j < dim; j++) {
- System.out.print(maze[i][j] == '-' ? '.' : maze[i][j]);
- }
- System.out.println();
- }
- }
- private static boolean mazeUtil(char[][] maze, int i, int j) {
- if(!isSafe(maze, i, j)) return false;
- if(isGoal(maze, i, j)) return true;
- else {
- maze[i][j] = '+'; // traversing path
- if(mazeUtil(maze, i-1, j)) return true; // up
- if(mazeUtil(maze, i, j-1)) return true; // left
- if(mazeUtil(maze, i+1, j)) return true; // down
- if(mazeUtil(maze, i, j+1)) return true; // right
- maze[i][j] = '-'; // traversed dead ends
- }
- return false;
- }
- private static boolean isSafe(char[][] maze, int i, int j) {
- try {
- if(maze[i][j] == '#' || maze[i][j] == '+') return false;
- else return true;
- } catch (ArrayIndexOutOfBoundsException e) {
- return false;
- }
- }
- private static boolean isGoal(char[][] maze, int i, int j) {
- return maze[i][j] == 'G';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement