-
Notifications
You must be signed in to change notification settings - Fork 164
/
Backtracking.cpp
100 lines (82 loc) · 1.83 KB
/
Backtracking.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
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
// Name: JHALA DEVRAJSINH SHRIPALSINH
// Date: 19/06/2021
// Purpose: Backtracking
// Backtracking:-
// Algorithmic technique for solving recursive problems by trying to build every possible solution incrementally and removing those solutions that fail to satisfy the constraints of the problem at any point of time
// Rat in a maze problem:-
#include<bits/stdc++.h>
using namespace std;
bool isSafe(int** arr, int x, int y, int n)
{
if(x<n && y<n && arr[x][y] == 1)
{
return true;
}
return false;
}
bool RatInMaze(int** arr, int x, int y, int n, int** solArr)
{
if(x == n-1 && y == n-1)
{
solArr[x][y] = 1;
return true;
} // Base condition
if(isSafe(arr,x,y,n))
{
solArr[x][y] = 1;
if(RatInMaze(arr,x+1,y,n,solArr))
{
return true;
}
if(RatInMaze(arr,x,y+1,n,solArr))
{
return true;
}
solArr[x][y] = 0; // Backtracking
return false;
}
return false;
}
int main()
{
int n;
cin >> n;
int** arr = new int*[n];
for(int i=0;i<n;i++)
{
arr[i] = new int[n];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin >> arr[i][j];
}
}
int** solArr = new int*[n];
for(int i=0;i<n;i++)
{
solArr[i] = new int[n];
for(int j=0;j<n;j++)
{
solArr[i][j] = 0;
}
}
if(RatInMaze(arr,0,0,n,solArr))
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout << solArr[i][j] << " ";
}cout << endl;
}
}
return 0;
}
// Input Array
// 1 0 1 0 1
// 1 1 1 1 1
// 0 1 0 1 0
// 1 0 0 1 1
// 1 1 1 0 1