diff --git a/959. Regions Cut By Slashes b/959. Regions Cut By Slashes new file mode 100644 index 0000000..db885c0 --- /dev/null +++ b/959. Regions Cut By Slashes @@ -0,0 +1,46 @@ +class Solution { +private: + vector> dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + unordered_map>> mp = { + {'/', {{0, 0, 1}, {0, 1, 0}, {1, 0, 0}}}, + {'\\', {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}}, + {' ', {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}} + }; + vector> zoom(vector& grid){ + int n = grid.size(); + vector> res(3*n, vector(3*n, 0)); + for(int i = 0; i < n; i++){ + for(int j = 0; j < n; j++){ + for(int r = 0; r < 3; r++){ + for(int c = 0; c < 3; c++){ + res[3*i+r][3*j+c] = mp[grid[i][j]][r][c]; + } + } + } + } + return res; + } + void markRegion(vector>& grid, int r, int c){ + if(grid[r][c] == -1 || grid[r][c] == 1) return; + grid[r][c] = -1; + int n = grid.size(); + for(auto& [x, y]: dirs){ + int new_x = r + x, new_y = c + y; + if(new_x >= 0 && new_y >= 0 && new_x < n && new_y < n) markRegion(grid, new_x, new_y); + } + } +public: + int regionsBySlashes(vector& grid) { + int cnt = 0; + vector> zoomed = zoom(grid); + int n = zoomed.size(); + for(int i = 0; i < n; i++){ + for(int j = 0; j < n; j++){ + if(zoomed[i][j] == -1 || zoomed[i][j] == 1) continue; + cnt++; + markRegion(zoomed, i, j); + } + } + return cnt; + } +};