I am trying to solve the backtracking problem rat in a maze, but it's not printing the solution, Please look into code and help me out.
The code is below:
#include <bits/stdc++.h>
using namespace std;
vector<string> ans;
bool isSafe(vector<vector<int>> &matrix, vector<vector<int>> &visited, int size, int srcx, int srcy)
{
if (srcx >= 0 && srcy >= 0 && srcy < size && srcx < size && matrix[srcx][srcy] == 1 && !visited[srcx][srcy])
{
return true;
}
else
{
return false;
}
}
void findPathUtiltity(vector<vector<int>> &matrix, vector<vector<int>> &visited, int size, int srcx, int srcy, string temp)
{
// check if we are at (3,3)
if (srcx == size - 1 && srcy == size - 1)
{
ans.push_back(temp);
return;
}
// mark visited as true
visited[srcx][srcy] = 1;
// DOWN
if (isSafe(matrix, visited, srcx + 1, srcy, size))
{
findPathUtiltity(matrix, visited, size, srcx + 1, srcy, temp + "D");
}
// LEFT
if (isSafe(matrix, visited, srcx, srcy - 1, size))
{
findPathUtiltity(matrix, visited, size, srcx, srcy - 1, temp + "L");
}
// Right
if (isSafe(matrix, visited, srcx, srcy + 1, size))
{
findPathUtiltity(matrix, visited, size, srcx, srcy + 1, temp + "R");
// UP
if (isSafe(matrix, visited, srcx - 1, srcy, size))
{
findPathUtiltity(matrix, visited, size, srcx - 1, srcy, temp + "U");
}
}
// mark all 0 to backtrack and check all other path
visited[srcx][srcy] = 0;
return;
}
vector<string> findPath(vector<vector<int>> &matrix, int size)
{
if (matrix[0][0] == 0)
{
return ans;
}
vector<vector<int>> visited(size, vector<int>(size, 0));
findPathUtiltity(matrix, visited, size, 0, 0, "");
return ans;
}
int main()
{
vector<vector<int>> matrix = {
{1, 0, 0, 0, 0},
{1, 1, 1, 1, 1},
{1, 1, 1, 0, 1},
{0, 0, 0, 0, 1},
{0, 0, 0, 0, 1}};
vector<string> path = findPath(matrix, matrix.size());
for (int i = 0; i < path.size(); i++)
{
cout << path[i] << " ";
}
return 0;
}
I am trying to solve the backtracking problem rat in a maze, but it's not printing the solution, i taken matrix of vector<vector<int>>matrix; . I try to DRY run there i'm getting correct output. Please look into code and help me out.