[LC] 490. The Maze

Posted xuanlu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LC] 490. The Maze相关的知识,希望对你有一定的参考价值。

There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolling up, down, left or right, but it won‘t stop rolling until hitting a wall. When the ball stops, it could choose the next direction.

Given the ball‘s start position, the destination and the maze, determine whether the ball could stop at the destination.

The maze is represented by a binary 2D array. 1 means the wall and 0 means the empty space. You may assume that the borders of the maze are all walls. The start and destination coordinates are represented by row and column indexes.

 

Example 1:

Input 1: a maze represented by a 2D array

0 0 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 0 1 1
0 0 0 0 0

Input 2: start coordinate (rowStart, colStart) = (0, 4)
Input 3: destination coordinate (rowDest, colDest) = (4, 4)

Output: true

Explanation: One possible way is : left -> down -> left -> down -> right -> down -> right.

class Solution {
    public boolean hasPath(int[][] maze, int[] start, int[] destination) {
        int row = maze.length;
        int col = maze[0].length;
        Queue<Cell> queue = new LinkedList<>();
        boolean[][] visited = new boolean[row][col];
        queue.offer(new Cell(start[0], start[1]));
        visited[start[0]][start[1]] = true;
        int[][] directions = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
        while (!queue.isEmpty()) {
            Cell cur = queue.poll();
            int curX = cur.x;
            int curY = cur.y;
            for (int[] direction: directions) {
                int newX = curX;
                int newY = curY;
                while (newX >= 0 && newX < row && newY >= 0 && newY < col && maze[newX][newY] == 0) {
                    newX += direction[0];
                    newY += direction[1];
                }
                newX -= direction[0];
                newY -= direction[1];
                if (visited[newX][newY]) {
                    continue;
                }
                if (newX == destination[0] && newY ==destination[1]) {
                    return true;
                }
                queue.offer(new Cell(newX, newY));
                visited[newX][newY] = true;
            }
        }
        return false;
    }
}

class Cell {
    int x;
    int y;
    public Cell(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

 

以上是关于[LC] 490. The Maze的主要内容,如果未能解决你的问题,请参考以下文章

490. The Maze

[LC] 505. The Maze II

LC 499. The Maze III lock,hard

LeetCode 499. The Maze III

The Maze

The Maze II