From 5cef856496227e91157c700becfac4d9c570c5e8 Mon Sep 17 00:00:00 2001 From: Fazeel Usmani Date: Mon, 1 Nov 2021 20:58:06 +0530 Subject: [PATCH] Create 01_surroundedRegions.cpp --- .../01_surroundedRegions.cpp | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 11 November Leetcode Challenge 2021/01_surroundedRegions.cpp diff --git a/11 November Leetcode Challenge 2021/01_surroundedRegions.cpp b/11 November Leetcode Challenge 2021/01_surroundedRegions.cpp new file mode 100644 index 0000000..1989e67 --- /dev/null +++ b/11 November Leetcode Challenge 2021/01_surroundedRegions.cpp @@ -0,0 +1,36 @@ +class Solution { +public: + void DFS(vector>& board, int x, int y, char c) { + if (x < 0 || x >= board.size() || y < 0 || y >= board[0].size() || board[x][y] != 'O') return; + + board[x][y] = c; + + DFS(board, x + 1, y, c); + DFS(board, x - 1, y, c); + DFS(board, x, y + 1, c); + DFS(board, x, y - 1, c); + } + + void solve(vector>& board) { + int n = board.size(), m = board[0].size(); + + // Change the 'O's connected to border to '!' + for (int i = 0; i < n; i++) { + if (board[i][0] == 'O') DFS(board, i, 0, '!'); + if (board[i][m-1] == 'O') DFS(board, i, m-1, '!'); + } + + for (int i = 0; i < m; i++) { + if (board[0][i] == 'O') DFS(board, 0, i, '!'); + if (board[n-1][i] == 'O') DFS(board, n-1, i, '!'); + } + + // Change all remaining 'O's to 'x' and '!' back to 'O' + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (i && j && i < n - 1 && j < m - 1 && board[i][j] == 'O') board[i][j] = 'X'; + if (board[i][j] == '!') board[i][j] = 'O'; + } + } + } +};