kk
This commit is contained in:
51
src/main/java/com/dota/gridGraph/_909/Solution.java
Normal file
51
src/main/java/com/dota/gridGraph/_909/Solution.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package com.dota.gridGraph._909;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
|
||||
class Solution {
|
||||
public int snakesAndLadders(int[][] board) {
|
||||
var cnt = -1;
|
||||
int n = board.length;
|
||||
var book = new boolean[n * n + 1];
|
||||
var queue = new ArrayDeque<Integer>();
|
||||
queue.add(1);
|
||||
while (!queue.isEmpty()) {
|
||||
cnt++;
|
||||
int size = queue.size();
|
||||
for (int s = 0; s < size; s++) {
|
||||
int p = queue.poll();
|
||||
if (p == n * n) {
|
||||
return cnt;
|
||||
}
|
||||
for (int i = 1; i <= 6 && p + i <= n * n; i++) {
|
||||
var next = p + i;
|
||||
if (book[next]) continue;
|
||||
var xy = getXy(next, n);
|
||||
var x = xy[0];
|
||||
var y = xy[1];
|
||||
|
||||
book[next] = true;
|
||||
if (board[x][y] == -1) {
|
||||
queue.offer(next);
|
||||
continue;
|
||||
}
|
||||
|
||||
//跳到下一步
|
||||
queue.offer(board[x][y]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// k是编号
|
||||
// 从编号获取坐标
|
||||
int[] getXy(int no, int n) {
|
||||
var m = (no - 1) / n;
|
||||
var l = (no - 1) % n;
|
||||
if (m % 2 == 1) {
|
||||
return new int[]{n - 1 - m, n - l - 1};
|
||||
}
|
||||
return new int[]{n - 1 - m, l};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user