bool issafe(int x,int y, int n, vector<vector<int>> visited,vector<vector<int>> &mat){
if((x>=0 && x<n) && (y>=0 && y<n) && visited[x][y]==0 && mat[x][y]==1 ){
return true;
}
else{
return false;
}
}
void solve(vector<vector<int>> &mat,int n,vector<string> &ans,int x,int y,string path,vector<vector<int>> visited){
if(x==n-1&&y==n-1){
ans.push_back(path);
return;
}
visited[x][y]=1;
//down
int newx=x+1;
int newy=y;
if(issafe(newx,newy,n,visited,mat)){
path.push_back('D');
solve(mat, n, ans, newx, newy, path, visited);
path.pop_back();
}
//left
newx=x;
newy=y-1;
if(issafe(newx,newy,n,visited,mat)){
path.push_back('L');
solve(mat, n, ans, newx, newy, path, visited);
path.pop_back();
}
//right
newx=x;
newy=y+1;
if(issafe(newx,newy,n,visited,mat)){
path.push_back('R');
solve(mat, n, ans, newx, newy, path, visited);
path.pop_back();
}
//UP
newx=x-1;
newy=y;
if(issafe(newx,newy,n,visited,mat)){
path.push_back('U');
solve(mat, n, ans, newx, newy, path, visited);
path.pop_back();
}
visited[x][y]=0;
}
vector<string> ratMaze(vector<vector<int>> &mat) {
// Write your code here.
int n=mat.size();
vector<string> ans;
if(mat[0][0]==0){
return ans;
}
int srcx=0;
int srcy=0;
vector<vector<int>> visited(n,vector<int>(n,0));
string path="";
solve(mat,n,ans,srcx,srcy,path,visited);
return ans;
}