add: 220205-CN
This commit is contained in:
parent
75dec4ff64
commit
fc704be306
|
|
@ -0,0 +1,57 @@
|
||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1219. Path with Maximum Gold
|
||||||
|
* In a gold mine grid of size m x n, each cell in this mine has an integer representing the amount of gold in that cell, 0 if it is empty.
|
||||||
|
*
|
||||||
|
* Return the maximum amount of gold you can collect under the conditions:
|
||||||
|
* - Every time you are located in a cell you will collect all the gold in that cell.
|
||||||
|
* - From your position, you can walk one step to the left, right, up, or down.
|
||||||
|
* - You can't visit the same cell more than once.
|
||||||
|
* - Never visit a cell with 0 gold.
|
||||||
|
* - You can start and stop collecting gold from any position in the grid that has some gold.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
private:
|
||||||
|
static int dfs(const std::vector<std::vector<int>>& grid, int x, int y, bool* const vis) {
|
||||||
|
int ret = 0;
|
||||||
|
const auto m = grid.size(), n = grid.front().size();
|
||||||
|
vis[x * n + y] = true;
|
||||||
|
if (x > 0 && !vis[(x - 1) * n + y] && grid[x - 1][y]) {
|
||||||
|
ret = dfs(grid, x - 1, y, vis);
|
||||||
|
}
|
||||||
|
if (y > 0 && !vis[x * n + y - 1] && grid[x][y - 1]) {
|
||||||
|
ret = std::max(ret, dfs(grid, x, y - 1, vis));
|
||||||
|
}
|
||||||
|
if (x + 1 < m && !vis[(x + 1) * n + y] && grid[x + 1][y]) {
|
||||||
|
ret = std::max(ret, dfs(grid, x + 1, y, vis));
|
||||||
|
}
|
||||||
|
if (y + 1 < n && !vis[x * n + y + 1] && grid[x][y + 1]) {
|
||||||
|
ret = std::max(ret, dfs(grid, x, y + 1, vis));
|
||||||
|
}
|
||||||
|
vis[x * n + y] = false;
|
||||||
|
return ret + grid[x][y];
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
static int getMaximumGold(const std::vector<std::vector<int>>& grid) {
|
||||||
|
auto m = grid.size(), n = grid.front().size();
|
||||||
|
bool* const vis = new bool[m * n]{};
|
||||||
|
int ret = 0;
|
||||||
|
for (decltype(m) i = 0; i < m; ++i) {
|
||||||
|
for (decltype(n) j = 0; j < n; ++j) {
|
||||||
|
if (grid[i][j]) {
|
||||||
|
ret = std::max(ret, dfs(grid, i, j, vis));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] vis;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::cout << Solution::getMaximumGold({{0,0,1},{1,1,0},{1,1,0}});
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -3,4 +3,4 @@ PROJECT(2202)
|
||||||
|
|
||||||
SET(CMAKE_CXX_STANDARD 23)
|
SET(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
ADD_EXECUTABLE(2202 220204-CN.cpp)
|
ADD_EXECUTABLE(2202 220205-CN.cpp)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue