题目描述
示例:
题目解析:
题目解析:
实现:
class Solution {
int n = 0;
public int snakesAndLadders(int[][] board) {
n = board.length;
int[] nums = new int[n * n];
boolean flag = true;
int k = 0;
for (int i = n - 1; i >= 0; i--) {
if (flag) {
for (int j = 0; j < n; j++) {
nums[k++] = board[i][j];
}
flag = false;
continue;
}
if (!flag) {
for (int j = n - 1; j >= 0; j--) {
nums[k++] = board[i][j];
}
flag = true;
continue;
}
}
return bfs(nums);
}
public int bfs(int[] nums) {
Queue<Integer> queue = new LinkedList<>();
Map<Integer, Integer> map = new HashMap<>();
queue.offer(0);
map.put(0, 0);
while (!queue.isEmpty()) {
int poll = queue.poll();
int num = map.get(poll);
if (poll == nums.length - 1) return num;
for (int i = 1; i <= 6; i++) {
int cur = poll + i;
if (nums[cur] != -1) cur = (nums[cur] - 1);
if (cur == n * n - 1) return ++num;
if (map.containsKey(cur)) continue;
map.put(cur, num + 1);
queue.offer(cur);
}
}
return -1;
}
}