add: 221030
This commit is contained in:
parent
b2c871ce9a
commit
0b7cdf0450
|
|
@ -0,0 +1,54 @@
|
||||||
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
#include <tuple>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1293. Shortest Path in a Grid with Obstacles Elimination
|
||||||
|
*
|
||||||
|
* You are given an m x n integer matrix grid where each cell is either 0 (empty) or 1 (obstacle). You can move up, down, left, or right from and to an empty cell in one step.
|
||||||
|
* Return the minimum number of steps to walk from the upper left corner (0, 0) to the lower right corner (m - 1, n - 1) given that you can eliminate at most k obstacles. If it is not possible to find such walk return -1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
private:
|
||||||
|
static constexpr inline bool OK(int x, int y, int m, int n) {
|
||||||
|
return x >= 0 && y >= 0 && x < m && y < n;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const inline int dX[] = {0, 1, 0, -1};
|
||||||
|
static const inline int dY[] = {1, 0, -1, 0};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int shortestPath(const std::vector<std::vector<int>>& G, const int k) {
|
||||||
|
const int m = G.size(), n = G.front().size(), p = m * n;
|
||||||
|
if (m == 1 && n == 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
auto dp = new int[40][40][1600]{};
|
||||||
|
std::queue<std::tuple<uint8_t, uint8_t, short, int>> q;
|
||||||
|
q.push({m - 1, n - 1, 0, 0});
|
||||||
|
dp[m - 1][n - 1][0] = -1;
|
||||||
|
while (!q.empty()) {
|
||||||
|
const auto [x, y, d, l] = q.front();
|
||||||
|
q.pop();
|
||||||
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
int nx = x + dX[i], ny = y + dY[i];
|
||||||
|
if (!OK(nx, ny, m, n) || dp[nx][ny][d + G[nx][ny]] || d + G[nx][ny] > k)
|
||||||
|
continue;
|
||||||
|
q.push({nx, ny, d + G[nx][ny], dp[nx][ny][d + G[nx][ny]] = 1 + l});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int ans = 0x7FFFFFFF;
|
||||||
|
for (int i = 0; i <= k; ++i)
|
||||||
|
if (dp[0][0][i])
|
||||||
|
ans = std::min(ans, dp[0][0][i]);
|
||||||
|
delete[] dp;
|
||||||
|
return ans == 0x7FFFFFFF ? -1 : ans;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::cout << Solution::shortestPath({{0,0,0},{1,1,0},{0,0,0},{0,1,1},{0,0,0}}, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -3,4 +3,4 @@ PROJECT(2210)
|
||||||
|
|
||||||
SET(CMAKE_CXX_STANDARD 23)
|
SET(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
ADD_EXECUTABLE(2210 221029-CN.cpp)
|
ADD_EXECUTABLE(2210 221030.cpp)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue