Advertisement
lifeiteng

490. The Maze

Sep 25th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.29 KB | None | 0 0
  1. class Solution {
  2.     public boolean hasPath(int[][] maze, int[] start, int[] destination) {
  3.         int m = maze.length, n = maze[0].length;
  4.         memo = new Boolean[m][n];
  5.         int i = start[0], j = start[1];
  6.         return dfs(maze, new boolean[m][n], i, j, destination);
  7.     }
  8.    
  9.     Boolean[][] memo;
  10.    
  11.     boolean dfs(int[][] maze, boolean[][] visited, int i, int j, int[] destination)
  12.     {
  13.         if(destination[0] == i && destination[1] == j) return true;
  14.         if(memo[i][j] != null) return memo[i][j];
  15.         int[] dx = {0, 1, 0, -1}, dy = {1, 0, -1, 0};
  16.         int m = maze.length, n = maze[0].length;
  17.         visited[i][j] = true;
  18.         for(int k = 0; k < 4; k++)
  19.         {
  20.             int ni = i, nj = j;
  21.             while(ni + dx[k] >= 0 && nj + dy[k]>= 0 && ni + dx[k] < m && nj + dy[k]< n && maze[ni + dx[k]][nj + dy[k]] == 0)
  22.             {
  23.                 ni += dx[k];
  24.                 nj += dy[k];
  25.             }
  26.             // now ni and nj are at border
  27.             if(ni == i && nj == j || visited[ni][nj]) continue;    // did not change position
  28.             visited[ni][nj] = true;
  29.             if(dfs(maze, visited, ni, nj, destination)) return memo[i][j] = true;
  30.             visited[ni][nj] = false;
  31.         }
  32.         return memo[i][j] = false;
  33.     }
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement