public static boolean flag=false;
int[] dx={0,0,-1,1};
int[] dy={-1,1,0,0};
public boolean hasPath(int[][] maze,int[] start,int[] destination){
boolean[][] visited = new boolean[maze.length][maze[0].length];
dfs(start[0], start[1], destination, maze, visited);
return flag;
}
public void dfs(int x,int y,int[] destination,int[][] maze,boolean[][] visited){
if (x == destination[0] && y == destination[1]) {
flag = true;
return;
}
if(visited[x][y]) return;
visited[x][y] = true;
for(int i=0;i<4;i++){
int currentx=x+dx[i];
int currenty=y+dy[i];
while(!border(currentx, currenty, maze) && maze[currentx][currenty] == 0) {
currentx = currentx + dx[i];
currenty = currenty + dy[i];
}
int newx = currentx - dx[i];
int newy = currenty - dy[i];
if(!flag) dfs(newx, newy, destination, maze, visited);
}
}
public boolean border(int x,int y,int[][] maze){
if(x>=maze.length || y>=maze[0].length || x<0 || y<0){
return true;
}
return false;
}