Java

 

Introduction

In this tutorial, we will create a simple Java program to solve a maze using a backtracking algorithm. A maze is a puzzle consisting of paths and walls, and our goal is to find a path from the start point to the end point. Backtracking is a technique used to find the solution by exploring possible paths and backtracking when a path doesn’t lead to the solution.

Objective

The objective of this program is to implement a maze solver using Java. We will represent the maze as a 2D array, with 0 for an open path and 1 for a wall. The program will use a depth-first search approach to explore the maze and find a path from the start to the end.

Java Code

import java.util.*;

public class MazeSolver {

    // Size of the maze
    static int N = 5;
    
    // Directions to move in the maze (up, down, left, right)
    static int[] rowDirection = {-1, 1, 0, 0};
    static int[] colDirection = {0, 0, -1, 1};

    // Function to solve the maze
    public static boolean solveMaze(int[][] maze, int x, int y, int[][] solution) {
        // If we have reached the destination, return true
        if (x == N - 1 && y == N - 1) {
            solution[x][y] = 1;
            return true;
        }

        // Check if current position is valid and safe to move
        if (isSafe(maze, x, y)) {
            // Mark the current cell as part of the solution path
            solution[x][y] = 1;

            // Move in all possible directions (up, down, left, right)
            for (int dir = 0; dir < 4; dir++) { int newX = x + rowDirection[dir]; int newY = y + colDirection[dir]; // Recursively explore the next cell if (solveMaze(maze, newX, newY, solution)) { return true; } // If no path is found, backtrack by unmarking the current cell solution[x][y] = 0; } } return false; } // Function to check if a cell is safe to visit public static boolean isSafe(int[][] maze, int x, int y) { // Check if the cell is within bounds and not a wall return (x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 0);
    }

    // Function to print the solution matrix
    public static void printSolution(int[][] solution) {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(solution[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // 0 represents open path and 1 represents wall
        int[][] maze = {
            {0, 0, 0, 1, 0},
            {1, 1, 0, 1, 0},
            {0, 1, 0, 0, 0},
            {0, 1, 1, 1, 0},
            {0, 0, 0, 0, 0}
        };

        int[][] solution = new int[N][N]; // To store the solution path

        // Call the solveMaze function to find the solution
        if (solveMaze(maze, 0, 0, solution)) {
            System.out.println("Solution path found:");
            printSolution(solution);
        } else {
            System.out.println("No solution found.");
        }
    }
}

Explanation of the Program

This Java program uses a backtracking algorithm to solve the maze. Here’s a breakdown of the key components:

  • Maze Representation: The maze is represented as a 2D array where 0 represents an open path and 1 represents a wall.
  • Backtracking Algorithm: The program recursively explores the maze starting from the top-left corner (0, 0). It moves in all four directions (up, down, left, right) and tries to reach the bottom-right corner (N-1, N-1). If a path is not possible, it backtracks.
  • Solution Matrix: The program maintains a solution matrix where 1 indicates a part of the valid path and 0 represents unvisited cells.
  • isSafe Function: This function checks if a given cell is within the bounds of the maze and is not blocked by a wall.

How to Run the Program

  1. Open your preferred Java IDE (like IntelliJ IDEA, Eclipse, or NetBeans).
  2. Create a new Java project and add a new Java class named MazeSolver.
  3. Copy and paste the provided code into the MazeSolver.java file.
  4. Compile and run the program. You should see the solution matrix printed to the console if a path exists.
© 2025 Learn Programming. All rights reserved.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

Your email address will not be published. Required fields are marked *

error

Enjoy this blog? Please spread the word :)