kk
This commit is contained in:
50
src/main/java/com/dota/gridGraph/_1293/Solution.java
Normal file
50
src/main/java/com/dota/gridGraph/_1293/Solution.java
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
package com.dota.gridGraph._1293;
|
||||||
|
|
||||||
|
import java.util.ArrayDeque;
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int shortestPath(int[][] grid, int k) {
|
||||||
|
if (grid.length == 1 && grid[0].length == 1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var queue = new ArrayDeque<int[]>();
|
||||||
|
k = Math.min(k, grid.length + grid[0].length - 1);
|
||||||
|
queue.add(new int[]{0, 0, k});
|
||||||
|
int cnt = 0;
|
||||||
|
var book = new boolean[grid.length][grid[0].length][k + 1];
|
||||||
|
var next = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
|
||||||
|
while (!queue.isEmpty()) {
|
||||||
|
int size = queue.size();
|
||||||
|
cnt++;
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
var t = queue.poll();
|
||||||
|
int x = t[0], y = t[1], z = t[2];
|
||||||
|
for (int[] xy : next) {
|
||||||
|
var nextx = x + xy[0];
|
||||||
|
var nexty = y + xy[1];
|
||||||
|
if (nextx < 0 || nexty < 0 || nextx >= grid.length || nexty >= grid[0].length) continue;
|
||||||
|
if (nextx == grid.length - 1 && nexty == grid[0].length - 1) {
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (z == 0 && grid[nextx][nexty] == 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid[nextx][nexty] == 0 && !book[nextx][nexty][z]) {
|
||||||
|
book[nextx][nexty][z] = true;
|
||||||
|
queue.offer(new int[]{nextx, nexty, z});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid[nextx][nexty] == 1 && !book[nextx][nexty][z - 1]) {
|
||||||
|
book[nextx][nexty][z - 1] = true;
|
||||||
|
queue.offer(new int[]{nextx, nexty, z - 1});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user