-
Notifications
You must be signed in to change notification settings - Fork 342
/
Rat In A Maze.cpp
70 lines (56 loc) · 1.17 KB
/
Rat In A Maze.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Rat in a Maze problem:
#Backtracking
Find all paths from source to destination, where some cells are blocked
To store the paths, mark the valid vertices as 1
*/
#include<iostream>
using namespace std;
bool ratInaMaze(char maze[10][10], int soln[][10], int i, int j, int m, int n)
{
if (i == m and j == n) {
soln[m][n] = 1;
//Base case: Found path
//Print path
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
cout << soln[i][j] << " ";
}
cout << endl;
}
cout << endl;
return true;
}
if (i > m or j > n) {
//out of bounds
return false;
}
if (maze[i][j] == 'X')
{
//cell is blocked
return false;
}
//Assuming that there is a path through maze[i][j]
soln[i][j] = 1;
bool rightsuccess = ratInaMaze(maze, soln, i, j + 1, m, n);
bool downsuccess = ratInaMaze(maze, soln, i + 1, j, m , n );
//backtracking
soln[i][j] = 0;
if (rightsuccess or downsuccess)
return true;
return false;
}
int main() {
char maze[10][10] = {
"0000",
"00X0",
"000X",
"0X00",
};
int soln[10][10] = {0};
int n = 4, m = 4;
bool ans = ratInaMaze(maze, soln, 0, 0, m - 1, n - 1);
if (!ans)
cout << "Path doesn't exist" << endl;
return 0;
}