diff options
| author | crupest <crupest@outlook.com> | 2020-08-29 00:38:41 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-08-29 00:38:41 +0800 | 
| commit | b5be63124149f2e19ada11292d1c307a0d85bd5e (patch) | |
| tree | bb31047206468e33f5f1df59b6ff0579ca277fe7 /works | |
| parent | be903c890e7ac39432c4eedfe5a797a91e9057b4 (diff) | |
| download | crupest-b5be63124149f2e19ada11292d1c307a0d85bd5e.tar.gz crupest-b5be63124149f2e19ada11292d1c307a0d85bd5e.tar.bz2 crupest-b5be63124149f2e19ada11292d1c307a0d85bd5e.zip | |
import(solutions): Add problem 1219 .
Diffstat (limited to 'works')
| -rw-r--r-- | works/solutions/cpp/1219.cpp | 64 | 
1 files changed, 64 insertions, 0 deletions
| diff --git a/works/solutions/cpp/1219.cpp b/works/solutions/cpp/1219.cpp new file mode 100644 index 0000000..5f72206 --- /dev/null +++ b/works/solutions/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 | 
