Interview 150

Snakes and Ladders

Problem
LC 909
File
interview150_LC909SnakesAndLadders.java
Path
pkg5leetcode/interview150/interview150_LC909SnakesAndLadders.java
Package
pkg5leetcode.interview150
Command
java pkg5leetcode/interview150/interview150_LC909SnakesAndLadders.java

LeetCode solutions

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg5leetcode/interview150/interview150_LC909SnakesAndLadders.java
1package pkg5leetcode.interview150;2 3/** LC 909 Snakes and Ladders */4import java.util.*;5 6public class interview150_LC909SnakesAndLadders {7  static int snakesAndLadders(int[][] board) {8    int n = board.length, target = n * n;9    int[] dist = new int[target + 1];10    Arrays.fill(dist, -1);11    Queue<Integer> q = new ArrayDeque<>();12    dist[1] = 0; q.add(1);13    while (!q.isEmpty()) {14      int cur = q.poll();15      if (cur == target) return dist[cur];16      for (int next = cur + 1; next <= Math.min(cur + 6, target); next++) {17        int[] rc = idx(next, n);18        int dest = board[rc[0]][rc[1]] > 0 ? board[rc[0]][rc[1]] : next;19        if (dist[dest] == -1) { dist[dest] = dist[cur] + 1; q.add(dest); }20      }21    }22    return -1;23  }24 25  static int[] idx(int sq, int n) {26    int r = (sq - 1) / n, c = (sq - 1) % n;27    if (r % 2 == 1) c = n - 1 - c;28    return new int[]{n - 1 - r, c};29  }30 31  public static void main(String[] args) {32    int[][] b = {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1},{-1,35,-1,-1,13,-1},{-1,-1,-1,-1,-1,-1},{-1,15,-1,-1,-1,-1}};33    System.out.println(snakesAndLadders(b));34  }35}