import
java.util.ArrayList;
import
java.util.List;
public
class
MazeSolver {
private
static
final
String direction =
"DLRU"
;
private
static
final
int
[] dr = {
1
,
0
,
0
, -
1
};
private
static
final
int
[] dc = {
0
, -
1
,
1
,
0
};
private
static
boolean
isValid(
int
r,
int
c,
int
n,
int
[][] maze)
{
return
r >=
0
&& c >=
0
&& r < n && c < n
&& maze[r] ==
1
;
}
private
static
void
findPath(
int
r,
int
c,
int
[][] maze,
int
n, List<String> ans,
StringBuilder currentPath)
{
if
(r == n -
1
&& c == n -
1
) {
ans.add(currentPath.toString());
return
;
}
maze[r] =
0
;
for
(
int
i =
0
; i <
4
; i++) {
int
nextr = r + dr[i];
int
nextc = c + dc[i];
if
(isValid(nextr, nextc, n, maze)) {
currentPath.append(direction.charAt(i));
findPath(nextr, nextc, maze, n, ans,
currentPath);
currentPath.deleteCharAt(
currentPath.length() -
1
);
}
}
maze[r] =
1
;
}
public
static
void
main(String[] args)
{
int
n =
4
;
int
[][] maze = { {
1
,
0
,
0
,
0
},
{
1
,
1
,
0
,
1
},
{
1
,
1
,
0
,
0
},
{
0
,
1
,
1
,
1
} };
List<String> result =
new
ArrayList<>();
StringBuilder currentPath =
new
StringBuilder();
findPath(
0
,
0
, maze, n, result, currentPath);
if
(result.isEmpty())
System.out.println(-
1
);
else
for
(String path : result)
System.out.print(path +
" "
);
System.out.println();
}
}