diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-02-12 15:55:21 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-02-12 16:04:50 +0800 |
commit | 77e6cdc863d2cbd9df578a665804daf28d8593fe (patch) | |
tree | 62c9f3e071d8d1d6fe125fe801907db11784332e /works/solutions/leetcode/cpp/1219.cpp | |
parent | 10eb95869601e145b1d8bc909424777c25752d51 (diff) | |
parent | a557fa36a22c5ef4a29da596ee1e3aa10be55984 (diff) | |
download | crupest-77e6cdc863d2cbd9df578a665804daf28d8593fe.tar.gz crupest-77e6cdc863d2cbd9df578a665804daf28d8593fe.tar.bz2 crupest-77e6cdc863d2cbd9df578a665804daf28d8593fe.zip |
import(solutions): IMPORT crupest/solutions COMPLETE.
Diffstat (limited to 'works/solutions/leetcode/cpp/1219.cpp')
-rw-r--r-- | works/solutions/leetcode/cpp/1219.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/works/solutions/leetcode/cpp/1219.cpp b/works/solutions/leetcode/cpp/1219.cpp new file mode 100644 index 0000000..5f72206 --- /dev/null +++ b/works/solutions/leetcode/cpp/1219.cpp @@ -0,0 +1,64 @@ +#include <vector>
+
+using std::vector;
+
+class Solution
+{
+public:
+ static void dfs(const vector<vector<int>> &grid, bool **visited, int row, int col, int row_max, int col_max, int ¤t, int &max)
+ {
+ int cell = grid[row][col];
+ bool &cell_visited = visited[row][col];
+ if (cell == 0 || cell_visited)
+ return;
+ current += cell;
+ cell_visited = true;
+
+ if (current > max)
+ max = current;
+
+ if (row < row_max)
+ dfs(grid, visited, row + 1, col, row_max, col_max, current, max);
+
+ if (col < col_max)
+ dfs(grid, visited, row, col + 1, row_max, col_max, current, max);
+
+ if (row > 0)
+ dfs(grid, visited, row - 1, col, row_max, col_max, current, max);
+
+ if (col > 0)
+ dfs(grid, visited, row, col - 1, row_max, col_max, current, max);
+
+ cell_visited = false;
+ current -= cell;
+ }
+
+ int getMaximumGold(vector<vector<int>> &grid)
+ {
+ int row_max = grid.size();
+ int col_max = grid.front().size();
+
+ bool **visited = new bool *[row_max];
+ for (int i = 0; i < row_max; i++)
+ {
+ visited[i] = new bool[col_max]{false};
+ }
+
+ int current = 0;
+ int max = 0;
+
+ for (int row_start = 0; row_start < row_max; row_start++)
+ for (int col_start = 0; col_start < col_max; col_start++)
+ {
+ dfs(grid, visited, row_start, col_start, row_max - 1, col_max - 1, current, max);
+ }
+
+ for (int i = 0; i < row_max; i++)
+ {
+ delete[] visited[i];
+ }
+ delete[] visited;
+
+ return max;
+ }
+};
\ No newline at end of file |