1. 程式人生 > >Java/909. Snakes and Ladders 爬坡和梯子

Java/909. Snakes and Ladders 爬坡和梯子

題目

程式碼部分二(20ms)

class Solution {
    public int snakesAndLadders(int[][] board) {
        int n = board.length;
        int[] b = new  int [n*n+1];
        boolean bo = true;
        int x = 1;
        for(int i = n -1; i >= 0; i--)
        {
            if(bo)
            {
                for(int j = 0; j < n; j++) b[x++] = board[i][j];
            }
            else
            {
                for(int j = n-1; j >= 0; j--) b[x++] = board[i][j];
            }
            bo = !bo;
        }
        Queue<Integer> q = new ArrayDeque<>();
        q.add(1);
        int[] d = new int[n*n+1];
        Arrays.fill(d, -1);
        d[1] = 0;
        while(!q.isEmpty())
        {
            int now = q.poll();
            for(int i = 1; i<= 6; i++)
            {
                if(now + i > n*n)
                    break;
                int next = now + i;
                if(b[next] > -1) 
                    next = b[next];
                if(next == n*n)
                    return d[now]+1;
                if(d[next] == -1)
                {
                    q.offer(next);
                    d[next] = d[now]+1;
                }
            }
        }
        return -1;
    }
}