@@ -71,7 +71,6 @@ class Solution:
71
71
for i in range (m):
72
72
for j in range (n):
73
73
if board[i][j] == ' O' :
74
- root = find(i * n + j)
75
74
if i == 0 or j == 0 or i == m - 1 or j == n - 1 :
76
75
p[find(i * n + j)] = find(m * n)
77
76
else :
@@ -81,10 +80,8 @@ class Solution:
81
80
82
81
for i in range (m):
83
82
for j in range (n):
84
- if find(i * n + j) != find(m * n):
83
+ if board[i][j] == ' O ' and find(i * n + j) != find(m * n):
85
84
board[i][j] = ' X'
86
- else :
87
- board[i][j] = ' O'
88
85
```
89
86
90
87
### ** Java**
@@ -121,10 +118,8 @@ class Solution {
121
118
}
122
119
for (int i = 0 ; i < m; ++ i) {
123
120
for (int j = 0 ; j < n; ++ j) {
124
- if (find(i * n + j) != find(m * n)) {
121
+ if (board[i][j] == ' O ' && find(i * n + j) != find(m * n)) {
125
122
board[i][j] = ' X' ;
126
- } else {
127
- board[i][j] = ' O' ;
128
123
}
129
124
}
130
125
}
@@ -195,6 +190,100 @@ function dfs(board: string[][], i: number, j: number, visited: boolean[][], edge
195
190
}
196
191
```
197
192
193
+ ### ** C++**
194
+
195
+ 并查集。
196
+
197
+ ``` cpp
198
+ class Solution {
199
+ public:
200
+ vector<int > p;
201
+ int dirs[ 4] [ 2 ] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
202
+
203
+ void solve(vector<vector<char>>& board) {
204
+ int m = board.size(), n = board[0].size();
205
+ p.resize(m * n + 1);
206
+ for (int i = 0; i < p.size(); ++i) p[i] = i;
207
+ for (int i = 0; i < m; ++i)
208
+ {
209
+ for (int j = 0; j < n; ++j)
210
+ {
211
+ if (board[i][j] == 'O')
212
+ {
213
+ if (i == 0 || j == 0 || i == m - 1 || j == n - 1) p[find(i * n + j)] = find(m * n);
214
+ else
215
+ {
216
+ for (auto e : dirs)
217
+ {
218
+ if (board[i + e[0]][j + e[1]] == 'O') p[find(i * n + j)] = find((i + e[0]) * n + j + e[1]);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ }
224
+ for (int i = 0 ; i < m; ++i)
225
+ {
226
+ for (int j = 0; j < n; ++j)
227
+ {
228
+ if (board[i][j] == 'O' && find(i * n + j) != find(m * n)) board[i][j] = 'X';
229
+ }
230
+ }
231
+ }
232
+
233
+ int find(int x) {
234
+ if (p[x] != x) p[x] = find(p[x]);
235
+ return p[x];
236
+ }
237
+ };
238
+ ```
239
+
240
+ ### ** Go**
241
+
242
+ 并查集。
243
+
244
+ ``` go
245
+ var p []int
246
+
247
+ func solve (board [][]byte ) {
248
+ m , n := len (board), len (board[0 ])
249
+ p = make ([]int , m*n+1 )
250
+ for i := 0 ; i < len (p); i++ {
251
+ p[i] = i
252
+ }
253
+ dirs := [4 ][2 ]int {{0 , -1 }, {0 , 1 }, {1 , 0 }, {-1 , 0 }}
254
+ for i := 0 ; i < m; i++ {
255
+ for j := 0 ; j < n; j++ {
256
+ if board[i][j] == ' O' {
257
+ if i == 0 || j == 0 || i == m-1 || j == n-1 {
258
+ p[find (i*n+j)] = find (m * n)
259
+ } else {
260
+ for _ , e := range dirs {
261
+ if board[i+e[0 ]][j+e[1 ]] == ' O' {
262
+ p[find (i*n+j)] = find ((i+e[0 ])*n + j + e[1 ])
263
+ }
264
+ }
265
+ }
266
+ }
267
+
268
+ }
269
+ }
270
+ for i := 0 ; i < m; i++ {
271
+ for j := 0 ; j < n; j++ {
272
+ if board[i][j] == ' O' && find (i*n+j) != find (m*n) {
273
+ board[i][j] = ' X'
274
+ }
275
+ }
276
+ }
277
+ }
278
+
279
+ func find (x int ) int {
280
+ if p[x] != x {
281
+ p[x] = find (p[x])
282
+ }
283
+ return p[x]
284
+ }
285
+ ```
286
+
198
287
### ** ...**
199
288
200
289
```
0 commit comments