Java Program for Rat in a Maze | Backtracking-2
Last Updated :
08 Jun, 2022
We have discussed Backtracking and Knight’s tour problem in Set 1. Let us discuss Rat in a Maze as another example problem that can be solved using Backtracking.
A Maze is given as N*N binary matrix of blocks where source block is the upper left most block i.e., maze[0][0], and destination block is lower rightmost block i.e., maze[N-1][N-1]. A rat starts from the source and has to reach its destination. The rat can move only in two directions: forward and down.
In the maze matrix, 0 means the block is a dead end, and 1 means the block can be used in the path from source to destination. Note that this is a simple version of the typical Maze problem. For example, a more complex version can be that the rat can move in 4 directions and a more complex version can be with a limited number of moves.
Following is an example maze.
Gray blocks are dead ends (value = 0).
Following is binary matrix representation of the above maze.
{1, 0, 0, 0}
{1, 1, 0, 1}
{0, 1, 0, 0}
{1, 1, 1, 1}
Following is a maze with highlighted solution path.
Following is the solution matrix (output of program) for the above input matrix.
{1, 0, 0, 0}
{1, 1, 0, 0}
{0, 1, 0, 0}
{0, 1, 1, 1}
All entries in solution path are marked as 1.
Java
public class RatMaze {
final int N = 4 ;
void printSolution( int sol[][])
{
for ( int i = 0 ; i < N; i++) {
for ( int j = 0 ; j < N; j++)
System.out.print( " " + sol[i][j] + " " );
System.out.println();
}
}
boolean isSafe( int maze[][], int x, int y)
{
return (x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 1 );
}
boolean solveMaze( int maze[][])
{
int sol[][] = { { 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 } };
if (solveMazeUtil(maze, 0 , 0 , sol) == false ) {
System.out.print( "Solution doesn't exist" );
return false ;
}
printSolution(sol);
return true ;
}
boolean solveMazeUtil( int maze[][], int x, int y,
int sol[][])
{
if (x == N - 1 && y == N - 1 ) {
sol[x][y] = 1 ;
return true ;
}
if (isSafe(maze, x, y) == true ) {
sol[x][y] = 1 ;
if (solveMazeUtil(maze, x + 1 , y, sol))
return true ;
if (solveMazeUtil(maze, x, y + 1 , sol))
return true ;
sol[x][y] = 0 ;
return false ;
}
return false ;
}
public static void main(String args[])
{
RatMaze rat = new RatMaze();
int maze[][] = { { 1 , 0 , 0 , 0 },
{ 1 , 1 , 0 , 1 },
{ 0 , 1 , 0 , 0 },
{ 1 , 1 , 1 , 1 } };
rat.solveMaze(maze);
}
}
|
Output:
1 0 0 0
1 1 0 0
0 1 0 0
0 1 1 1
Time Complexity: O(2^(n^2))
Auxiliary Space: O(n^2)
Please refer complete article on Rat in a Maze | Backtracking-2 for more details!
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...