Skip to content

Commit d9cfec3

Browse files
committed
backtracking - recursion: finds all possible maze path having some hurdles
1 parent 10c84bc commit d9cfec3

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package Lecture12;
2+
3+
public class mazePathWithHurdles {
4+
5+
public static void main(String[] args) {
6+
7+
int[][] arr = { { 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 9, 0, 0, 0 },
8+
{ 0, 9, 0, 0 } };
9+
// here 9 is the hurdle
10+
System.out.println("given board: ");
11+
displayMatrix(arr);
12+
int currentRow = 0, currentCol = 0, endRow = 3, endCol = 3;
13+
System.out.println("possible paths: \n");
14+
printMazePathHurdle(arr, endRow, endCol, currentRow, currentCol);
15+
16+
}
17+
18+
public static void printMazePathHurdle(int[][] arr, int endRow, int endCol,
19+
int currentRow, int currentCol) {
20+
21+
if (currentRow == endRow && currentCol == endCol) {
22+
arr[currentRow][currentCol] = 1;
23+
displayMatrix(arr);
24+
return;
25+
}
26+
if (currentRow > endRow | currentCol > endCol) {
27+
return;
28+
}
29+
30+
if (arr[currentRow][currentCol] == 9) {
31+
return; // back-track to previous cell
32+
}
33+
34+
arr[currentRow][currentCol] = 1; // set to 1 to indicate the cell is
35+
// traversed
36+
37+
printMazePathHurdle(arr, endRow, endCol, currentRow, currentCol + 1); // traverse
38+
// horizontally
39+
printMazePathHurdle(arr, endRow, endCol, currentRow + 1, currentCol); // traverse
40+
// vertically
41+
arr[currentRow][currentCol] = 1;
42+
}
43+
44+
public static void displayMatrix(int[][] arr) {
45+
for (int row = 0; row < arr[0].length; row++) {
46+
for (int col = 0; col < arr[row].length; col++) {
47+
System.out.print(arr[row][col]);
48+
}
49+
System.out.println();
50+
}
51+
System.out.println("--------------");
52+
}
53+
}
54+
55+
/*
56+
output:
57+
58+
given board:
59+
0090
60+
0090
61+
9000
62+
0900
63+
--------------
64+
possible paths:
65+
66+
1190
67+
0190
68+
9111
69+
0901
70+
--------------
71+
1190
72+
0190
73+
9111
74+
0911
75+
--------------
76+
1190
77+
1190
78+
9111
79+
0911
80+
--------------
81+
1190
82+
1190
83+
9111
84+
0911
85+
--------------
86+
87+
*/

0 commit comments

Comments
 (0)