Maze Solver Using
Backtracking
Tì áäpìpµøaø¾µ pĝá«aµì a Jaėa-baìpj ³aĨp 쾫ėpä ³á«p³pµøpj Ęø
bac¨øäac¨µ. Tp áä¾äa³ Āìpì a äaáca« µøpäacp ø¾ ėìĀa«Ĩp øp ³aĨp
aµj øp ì¾«Āø¾µ áaø. Iø jp³¾µìøäaøpì ¾Ę äpcĀäìėp bac¨øäac¨µ caµ µj
a áaø ä¾³ øp ìøaäø ø¾ øp pµj ¾ a ³aĨp.
MEET OUR TEAM
LEADER: SHADAAN ALI
ROLL NO: 23CS2021068
Maze Representation and Setup
Maze Grid GUI Components
Tp ³aĨp ì a 10ĝ10 äj äpáäpìpµøpj bĞ a 2D aääaĞ. Cp««ì Ęø Tp µøpäacp Āìpì Jaėa Sʵ Ęø a áaµp« ø¾ jäaĘ øp ³aĨp
0 aäp áaøì, aµj 1 aäp Ęa««ì. Tp ìøaäø ì aø øp ø¾á-«pø c¾äµpä, aµj a bĀøø¾µ ø¾ øäpä øp 쾫ėpä. Tp ʵj¾Ę ìĨp ì baìpj ¾µ
aµj øp ¾a« ì aø øp b¾øø¾³-äø c¾äµpä. cp«« ìĨp aµj äj j³pµì¾µì.
Backtracking Algorithm
Overview
1 Step 1: Check Boundaries
EµìĀäp øp cĀääpµø cp«« ì Ęøµ ³aĨp «³øì aµj µ¾ø a Ęa«« ¾ä a«äpajĞ
ėìøpj.
2 Step 2: Mark Cell
Maä¨ øp cĀääpµø cp«« aì áaäø ¾ øp ì¾«Āø¾µ áaø.
3 Step 3: Explore Neighbors
RpcĀäìėp«Ğ øäĞ ³¾ėµ äø, j¾Ęµ, «pø, aµj Āá ø¾ µj øp áaø ø¾
øp ¾a«.
4 Step 4: Backtrack
I µ¾ áaø ì ¾Āµj, µ³aä¨ øp cp«« aµj bac¨øäac¨ ø¾ øäĞ ¾øpä ä¾Āøpì.
Recursive Maze Solving Method
Function Signature Base Cases
Tp ³pø¾j øa¨pì øp cĀääpµø ä¾Ę aµj c¾«Ā³µ aì áaäa³pøpäì Cpc¨ì ¾ä ¾Āø-¾-b¾Āµjì, Ęa««ì, ¾ä ėìøpj cp««ì. RpøĀäµì øäĀp
aµj äpøĀäµì øäĀp a áaø ø¾ øp ¾a« ì ¾Āµj. Ępµ øp ¾a« cp«« ì äpacpj.
Graphical Visualization of
Maze
Walls
Däaʵ aì b«ac¨ ìãĀaäpì äpáäpìpµøµ ¾bìøac«pì.
Paths
Wøp ìãĀaäpì µjcaøp ¾ápµ áaøì Ępäp ³¾ėp³pµø ì á¾ììb«p.
Solution Path
CĞaµ «øì øp cp««ì ¾ä³µ øp ìĀccpììĀ« ä¾Āøp ä¾³ ìøaäø ø¾
µì.
Start and End
Gäppµ ³aä¨ì øp ìøaäø cp««, aµj äpj ³aä¨ì øp ¾a« cp««.
User Interaction and
Controls
Solve Button
Wpµ c«c¨pj, ø äpìpøì øp ì¾«Āø¾µ aµj ìøaäøì øp bac¨øäac¨µ
a«¾äø³.
Feedback
Dìá«aĞì a ³pììap ja«¾ µjcaøµ Ępøpä øp ³aĨp Ęaì 쾫ėpj
¾ä µ¾ ì¾«Āø¾µ Ęaì ¾Āµj.
Real-time Update
Tp ³aĨp áaµp« äpáaµøì ø¾ ì¾Ę øp ì¾«Āø¾µ áaø ³³pjaøp«Ğ
aøpä 쾫ėµ.
Handling No Solution Cases
I øp a«¾äø³ caµµ¾ø µj a áaø, ø bac¨øäac¨ì c¾³á«pøp«Ğ aµj äpøĀäµì
a«ìp. Tp Āìpä ì µ¾øpj Ęø a ja«¾ ìøaøµ "N¾ ì¾«Āø¾µ ¾Āµj!" pµìĀäµ
c«paä c¾³³Āµcaø¾µ ¾ a«Āäp caìpì.
Tì áäpėpµøì øp áä¾äa³ ä¾³ aµµ aµj a««¾Ęì Āìpäì ø¾ øäĞ jpäpµø
³aĨpì ¾ä c¾µĀäaø¾µì.
Code Structure and Modularity
Main Class MazePanel Class Recursive Solver
Haµj«pì GUI ìpøĀá, pėpµø aµj«µ, aµj Rpìá¾µìb«p ¾ä jäaʵ øp ³aĨp, EµcaáìĀ«aøpj µ a áäėaøp ³pø¾j øaø
³aĨp µøa«Ĩaø¾µ. Ęa««ì, áaøì, aµj ì¾«Āø¾µ ¾µ øp ápä¾ä³ì øp bac¨øäac¨µ ìpaäc.
ìcäppµ.
SOURCE CODE
³á¾äø ¥aėaĝ.ìʵ.;
³á¾äø ¥aėa.aĘø.;
³á¾äø ¥aėa.aĘø.pėpµø.*;
áĀb«c c«aìì MaĨpS¾«ėpäGUI pĝøpµjì JFäa³p {
áäėaøp ìøaøc µa« µø ROWS = 10;
áäėaøp ìøaøc µa« µø COLS = 10;
áäėaøp ìøaøc µa« µø CELL_SIZE = 40;
import [Link].*;
import [Link].*;
import [Link];
public class SmartRandomMazeSolverGUI extends JFrame
{
int N = 8;
int[][] maze;
int[][] sol;
JPanel gridPanel;
JButton generateBtn, solveBtn;
Random rand = new Random();
public SmartRandomMazeSolverGUI()
{
setTitle("Smart Random Maze Solver");
setSize(540, 600);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gridPanel = new JPanel(new GridLayout(N, N));
add(gridPanel, [Link]);
JPanel buttonPanel = new JPanel();
generateBtn = new JButton("Generate Maze");
solveBtn = new JButton("Solve Maze");
[Link](generateBtn);
[Link](solveBtn);
add(buttonPanel, [Link]);
[Link](e -> {
generateSolvableMaze();
sol = new int[N][N];
drawMaze();
});
[Link](e -> {
sol = new int[N][N];
if (!solveMaze(0, 0))
[Link](this, "No Solution Found!");
drawMaze();
});
generateSolvableMaze();
sol = new int[N][N];
drawMaze();
setVisible(true);
}
// Generate maze UNTIL it is solvable
void generateSolvableMaze()
{
do {
generateMaze();
sol = new int[N][N];
} while (!solveMaze(0, 0));
}
void generateMaze()
{
maze = new int[N][N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
maze[i][j] = [Link](2);
}
}
maze[0][0] = 1;
maze[N - 1][N - 1] = 1;
}
void drawMaze()
{
[Link]();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
JPanel cell = new JPanel();
[Link]([Link]([Link]));
if (i == 0 && j == 0)
[Link]([Link]);
else if (i == N - 1 && j == N - 1)
[Link]([Link]);
else if (sol[i][j] == 1)
[Link]([Link]);
else if (maze[i][j] == 0)
[Link]([Link]);
else
[Link]([Link]);
[Link](cell);
}
}
[Link]();
[Link]();
}
boolean isSafe(int x, int y)
{
return (x >= 0 && x < N &&
y >= 0 && y < N &&
maze[x][y] == 1 &&
sol[x][y] == 0);
}
// Backtracking in 4 directions
boolean solveMaze(int x, int y)
{
if (x == N - 1 && y == N - 1)
{
sol[x][y] = 1;
return true;
}
if (isSafe(x, y))
{
sol[x][y] = 1;
if (solveMaze(x + 1, y)) return true; // Down
if (solveMaze(x, y + 1)) return true; // Right
if (solveMaze(x - 1, y)) return true; // Up
if (solveMaze(x, y - 1)) return true; // Left
sol[x][y] = 0; // Backtrack
}
return false;
}
public static void main(String[] args)
{
new SmartRandomMazeSolverGUI();
}
}
}
Key Takeaways and Next
Steps
Backtracking Works
Iø ì aµ ppcøėp ³pø¾j ¾ä ì¾«ėµ ³aĨp áä¾b«p³ì bĞ pĝá«¾äµ a««
á¾ììb«p áaøì.
Visual Feedback
Gäaáca« äpáäpìpµøaø¾µ p«áì Āìpäì µjpäìøaµj øp ì¾«Āø¾µ
áä¾cpìì c«paä«Ğ.
Extend and Improve
FĀøĀäp Ę¾ä¨ c¾Ā«j µc«Ājp jеa³c ³aĨp pµpäaø¾µ, ³Ā«øá«p
a«¾äø³ì, ¾ä aµ³aø¾µ ¾ øp ì¾«ėµ áä¾cpìì.
Thank You
Wp aááäpcaøp оĀä ø³p ø¾jaĞ. Wp ¾áp øì áäpìpµøaø¾µ ««Ā³µaøpj øp á¾Ępä ¾ äpcĀäìėp bac¨øäac¨µ ¾ä pcpµø ³aĨp
쾫ėµ.
Questions?
Wp Ęp«c¾³p оĀä µãĀäpì aµj ppjbac¨ ¾µ øp ³aĨp 쾫ėpä.
Contact Us
Rpac ¾Āø ¾ä Āäøpä jìcĀìì¾µì ¾ä c¾««ab¾äaø¾µ ¾áá¾äøĀµøpì.
Explore the Code
Fµj øp Ā«« áä¾¥pcø c¾jp aµj ajjø¾µa« jpøa«ì ¾µ GøHĀb.