Advertisement
tintinmj

maze problem

Oct 21st, 2013
1,148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.74 KB | None | 0 0
  1. package mazeproblem;
  2.  
  3. import java.util.Scanner;
  4.  
  5. /**
  6.  *
  7.  * @author Tintinmj
  8.  */
  9. public class MazeProblem {
  10.  
  11.     public static int startI, startJ, goalI, goalJ;
  12.     public static void main(String[] args) throws InterruptedException {
  13.         Scanner in = new Scanner(System.in);
  14.        
  15.         printInfo();
  16.        
  17.         int dim = in.nextInt();
  18.         char[][] maze = new char[dim][dim];
  19.         inputMatrix(maze, dim, in);
  20.         try {
  21.             thinkProcess();
  22.         } catch (InterruptedException ex) {
  23.             System.out.println(" Abnormal termination check your comp man!!!");
  24.         }
  25.        
  26.         boolean isSolved = mazeUtil(maze, startI, startJ);
  27.         printResult(isSolved, maze, dim);
  28.        
  29.     }
  30.    
  31.     private static void printResult(boolean isSolved, char[][] maze, int dim) {
  32.        
  33.         maze[goalI][goalJ] = 'G';
  34.         maze[startI][startJ] = 'S';
  35.        
  36.         print(maze, dim);
  37.        
  38.         if(isSolved) {
  39.             System.out.println(" \ngoal reached :D");
  40.         }
  41.         else {
  42.             System.out.println(" \ngoal can't be reached :(");
  43.         }
  44.     }
  45.    
  46.     public static void printInfo() throws InterruptedException {
  47.         System.out.println("===== WELCOME TO MAZE SOLVER =====");
  48.         System.out.println("=====      By : TintinMj     =====");
  49.         System.out.println("=====        LEGENDS         =====");
  50.         System.out.println(" G : Goal");
  51.         System.out.println(" S : Source");
  52.         System.out.println(" # : Obstacle");
  53.         System.out.println(" . : Open Space");
  54.         System.out.println(" + : path from source to goal");
  55.         System.out.println(" \nSample input : ");
  56.         System.out.println( "4 (dimension of maze)\n" +
  57.                             "....\n" +
  58.                             ".##.\n" +
  59.                             ".##.\n" +
  60.                             "G..S");
  61.         thinkProcess();
  62.        
  63.         System.out.println(" \nSample output : ");
  64.         System.out.println( "++++\n" +
  65.                             "+##+\n" +
  66.                             "+##+\n" +
  67.                             "G..S");
  68.         System.out.println(" \nNow you try with something else :)");
  69.     }
  70.    
  71.     private static void xwait(long time) throws InterruptedException {
  72.         Thread.sleep(time);
  73.     }
  74.    
  75.     private static void thinkProcess() throws InterruptedException {
  76.         final long time = 900;
  77.        
  78.         System.out.print(" \nSolving maze .");
  79.         xwait(time);
  80.         System.out.print(".");
  81.         xwait(time);
  82.         System.out.print(".");
  83.         xwait(time);
  84.         System.out.println(".");
  85.     }
  86.    
  87.     private static void inputMatrix(char [][]maze, int dim, Scanner in) {
  88.         boolean startFound = false, goalFound = false;
  89.        
  90.         for(int i = 0; i < dim; i++) {
  91.             String s = in.next();
  92.             for(int j = 0; j < dim; j++) {
  93.                 char c = s.charAt(j);
  94.                 maze[i][j] = c;
  95.                 if(!startFound && c == 'S') {
  96.                     startI = i;
  97.                     startJ = j;
  98.                     startFound = true;
  99.                 }
  100.                 else if(!goalFound && c == 'G') {
  101.                     goalI = i;
  102.                     goalJ = j;
  103.                     goalFound = true;
  104.                 }
  105.             }
  106.         }
  107.     }
  108.    
  109.     public static void print(char[][]maze, int dim) {
  110.         System.out.println("\n=============\n");
  111.         for(int i = 0; i < dim; i++) {
  112.             for(int j = 0; j < dim; j++) {
  113.                 System.out.print(maze[i][j] == '-' ? '.' : maze[i][j]);
  114.             }
  115.             System.out.println();
  116.         }
  117.     }
  118.    
  119.     private static boolean mazeUtil(char[][] maze, int i, int j) {
  120.         if(!isSafe(maze, i, j))     return false;
  121.         if(isGoal(maze, i, j))      return true;
  122.        
  123.         else {
  124.             maze[i][j] = '+';                           // traversing path
  125.             if(mazeUtil(maze, i-1, j))  return true;    // up
  126.             if(mazeUtil(maze, i, j-1))  return true;    // left
  127.             if(mazeUtil(maze, i+1, j))  return true;    // down
  128.             if(mazeUtil(maze, i, j+1))  return true;    // right
  129.             maze[i][j] = '-';                           // traversed dead ends
  130.         }
  131.         return false;
  132.     }
  133.    
  134.     private static boolean isSafe(char[][] maze, int i, int j) {
  135.         try {
  136.             if(maze[i][j] == '#' || maze[i][j] == '+')   return false;
  137.             else                    return true;
  138.         } catch (ArrayIndexOutOfBoundsException e) {
  139.             return false;
  140.         }
  141.     }
  142.    
  143.     private static boolean isGoal(char[][] maze, int i, int j) {
  144.         return maze[i][j] == 'G';
  145.     }
  146.  
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement