-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rat in a Maze
123 lines (115 loc) · 3.69 KB
/
Rat in a Maze
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
using namespace std;
#include <vector>
bool isSafe(int maze[4][4], int srcX, int srcY, int row, int col, vector<vector<bool>> &visited)
{
if (((srcX >= 0) && srcY >= 0) && // condition for checking out of bound
(maze[srcX][srcY] == 1) && // condition for checking whether 1 or 0 at that place, 1=> shows movement is allowed, 0=> shows movement is not allowed
(visited[srcX][srcY] == false) // condition for checking if already visited or not
)
{
return true;
}
else
{
return false;
}
}
void printAllPath(int maze[4][4], int row, int col, int srcX, int srcY, string output, vector<vector<bool>> &visited)
{
// Base Case
if (srcX == row - 1 && srcY == col - 1)
{
cout << output << " "<<endl;
return;
};
// UP
int newSrcX = srcX - 1;
int newSrcY = srcY;
if (isSafe(maze, newSrcX, newSrcY, row, col, visited))
{
// mark visited
visited[newSrcX][newSrcY] = true; // yahan move kar rhe to mark visite kia
// call recursion function
output.push_back('U');
printAllPath(maze, row, col, newSrcX, newSrcY, output, visited);
// Backtracking
visited[newSrcX][newSrcY] = false; // yahan se move out kar rhe to mark unvisite kia
output.pop_back(); // yahan se move out kar rhe to remove 'U' from output string
}
// Down
newSrcX = srcX + 1;
newSrcY = srcY;
if (isSafe(maze, newSrcX, newSrcY, row, col, visited))
{
// mark visited
visited[newSrcX][newSrcY] = true; // yahan move kar rhe to mark visite kia
// call recursion function
output.push_back('D');
printAllPath(maze, row, col, newSrcX, newSrcY, output, visited);
// Backtracking
visited[newSrcX][newSrcY] = false; // yahan se move out kar rhe to mark unvisite kia
output.pop_back(); // yahan se move out kar rhe to remove 'U' from output string
}
// Right
newSrcX = srcX;
newSrcY = srcY + 1;
if (isSafe(maze, newSrcX, newSrcY, row, col, visited))
{
// mark visited
visited[newSrcX][newSrcY] = true; // yahan move kar rhe to mark visite kia
// call recursion function
output.push_back('R');
printAllPath(maze, row, col, newSrcX, newSrcY, output, visited);
// Backtracking
visited[newSrcX][newSrcY] = false; // yahan se move out kar rhe to mark unvisite kia
output.pop_back(); // yahan se move out kar rhe to remove 'U' from output string
}
// Left
newSrcX = srcX;
newSrcY = srcY - 1;
if (isSafe(maze, newSrcX, newSrcY, row, col, visited))
{
// mark visited
visited[newSrcX][newSrcY] = true; // yahan move kar rhe to mark visite kia
// call recursion function
output.push_back('L');
printAllPath(maze, row, col, newSrcX, newSrcY, output, visited);
// Backtracking
visited[newSrcX][newSrcY] = false; // yahan se move out kar rhe to mark unvisite kia
output.pop_back(); // yahan se move out kar rhe to remove 'U' from output string
}
}
int main()
{
int maze[4][4] = {
{1, 0, 0, 0},
{1, 1, 0, 0},
{1, 1, 1, 0},
{1, 1, 1, 1}};
int srcX = 0;
int srcY = 0;
int row = 4;
int col = 4;
string output = "";
vector<vector<bool>> visited(row, vector<bool>(col, false));
if (maze[0][0] == 0)
{
cout << "NO Path Exists!" << endl;
}
else
{
printAllPath(maze, row, col, srcX, srcY, output, visited);
}
return 0;
}
*/
All possible ways
DDDRURDR
DDDRRR
DDRDRR
DDRRDR
DRDDRR
DRDRDR
DRDLDRRR
/*