@@ -185,6 +185,113 @@ class Solution {
185
185
}
186
186
```
187
187
188
+ ### ** C++**
189
+
190
+ ``` cpp
191
+ class Solution {
192
+ public:
193
+ vector<int > p;
194
+ int dirs[ 4] [ 2 ] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
195
+
196
+ int largestArea(vector<string>& grid) {
197
+ int m = grid.size(), n = grid[0].size();
198
+ p.resize(m * n + 1);
199
+ for (int i = 0; i < p.size(); ++i) p[i] = i;
200
+ for (int i = 0; i < m; ++i)
201
+ {
202
+ for (int j = 0; j < n; ++j)
203
+ {
204
+ if (i == 0 || i == m - 1 || j == 0 || j == n - 1 || grid[i][j] == '0')
205
+ p[find(i * n + j)] = find(m * n);
206
+ else
207
+ {
208
+ for (auto e : dirs)
209
+ {
210
+ if (grid[i + e[0]][j + e[1]] == '0' || grid[i][j]== grid[i + e[0]][j + e[1]])
211
+ p[find(i * n + j)] = find((i + e[0]) * n + j + e[1]);
212
+ }
213
+ }
214
+ }
215
+ }
216
+ unordered_map<int , int > mp;
217
+ int res = 0 ;
218
+ for (int i = 0 ; i < m; ++i)
219
+ {
220
+ for (int j = 0; j < n; ++j)
221
+ {
222
+ int root = find(i * n + j);
223
+ if (root != find(m * n))
224
+ {
225
+ ++mp[root];
226
+ res = max(res, mp[root]);
227
+ }
228
+ }
229
+ }
230
+ return res;
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
+ ``` go
243
+ var p []int
244
+
245
+ func largestArea (grid []string ) int {
246
+ m , n := len (grid), len (grid[0 ])
247
+ p = make ([]int , m*n+1 )
248
+ for i := 0 ; i < len (p); i++ {
249
+ p[i] = i
250
+ }
251
+
252
+ dirs := [4 ][2 ]int {{0 , -1 }, {0 , 1 }, {1 , 0 }, {-1 , 0 }}
253
+ for i := 0 ; i < m; i++ {
254
+ for j := 0 ; j < n; j++ {
255
+ if i == 0 || i == m-1 || j == 0 || j == n-1 || grid[i][j] == ' 0' {
256
+ p[find (i*n+j)] = find (m * n)
257
+ } else {
258
+ for _ , e := range dirs {
259
+ if grid[i+e[0 ]][j+e[1 ]] == ' 0' || grid[i][j] == grid[i+e[0 ]][j+e[1 ]] {
260
+ p[find (i*n+j)] = find ((i+e[0 ])*n + j + e[1 ])
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
266
+ mp := make (map [int ]int , 0 )
267
+ res := 0
268
+ for i := 0 ; i < m; i++ {
269
+ for j := 0 ; j < n; j++ {
270
+ root := find (i*n + j)
271
+ if root != find (m*n) {
272
+ mp[root]++
273
+ res = max (res, mp[root])
274
+ }
275
+ }
276
+ }
277
+ return res
278
+ }
279
+
280
+ func find (x int ) int {
281
+ if p[x] != x {
282
+ p[x] = find (p[x])
283
+ }
284
+ return p[x]
285
+ }
286
+
287
+ func max (a , b int ) int {
288
+ if a > b {
289
+ return a
290
+ }
291
+ return b
292
+ }
293
+ ```
294
+
188
295
### ** ...**
189
296
190
297
```
0 commit comments