1
+ // https://leetcode.com/explore/challenge/card/june-leetcoding-challenge/541/week-3-june-15th-june-21st/3363/
2
+
3
+ class Solution {
4
+ private:
5
+ void traverse (vector<vector<char >>& copy, vector<vector<char >>& board, vector<vector<bool >>& visited, int r, int c) {
6
+ visited[r][c] = true ;
7
+
8
+ int row[] = {0 , 0 , -1 , 1 };
9
+ int col[] = {-1 , 1 , 0 , 0 };
10
+ int n = board.size ();
11
+ int m = board[0 ].size ();
12
+
13
+ for (int i = 0 ; i < 4 ; i++) {
14
+ int R = r + row[i];
15
+ int C = c + col[i];
16
+
17
+ if (R >= 0 && R < n && C >= 0 && C < m && copy[R][C] == ' O' && !visited[R][C]){
18
+ board[R][C] = ' O' ;
19
+ traverse (copy, board, visited, R, C);
20
+ }
21
+ }
22
+ }
23
+ public:
24
+ void solve (vector<vector<char >>& board) {
25
+ if (board.size () == 0 )
26
+ return ;
27
+ int n = board.size ();
28
+ int m = board[0 ].size ();
29
+
30
+ vector<vector<char >> copy = board;
31
+ int i, j;
32
+ for (i = 1 ; i < n - 1 ; i++) {
33
+ for (j = 1 ; j < m - 1 ; j++) {
34
+ if (board[i][j] == ' O' )
35
+ board[i][j] = ' X' ;
36
+ }
37
+ }
38
+
39
+ vector<vector<bool >> visited (board.size (), vector<bool >(board[0 ].size (), false ));
40
+
41
+ // for(i = 0; i < n; i++) {
42
+ // for(j = 0; j < m; j++)
43
+ // cout << board[i][j] << " ";
44
+ // cout << endl;
45
+ // }
46
+ for (i = 0 ; i < m; i++) {
47
+ if (board[0 ][i] == ' O' && !visited[0 ][i])
48
+ traverse (copy, board, visited, 0 , i);
49
+ }
50
+ for (i = 0 ; i < m; i++) {
51
+ if (board[n - 1 ][i] == ' O' && !visited[n - 1 ][i])
52
+ traverse (copy, board, visited, n - 1 , i);
53
+ }
54
+ for (i = 0 ; i < n; i++) {
55
+ if (board[i][0 ] == ' O' && !visited[i][0 ])
56
+ traverse (copy, board, visited, i, 0 );
57
+ }
58
+ for (i = 0 ; i < n; i++) {
59
+ if (board[i][m - 1 ] == ' O' && !visited[i][n - 1 ])
60
+ traverse (copy, board, visited, i, n - 1 );
61
+ }
62
+ }
63
+ };
0 commit comments