@@ -428,6 +428,150 @@ var maxAreaOfIsland = function (grid) {
428428};
429429```
430430
431+ ### Go
432+ 433+ dsf: 版本一
434+ 435+ ``` go
436+ var DIRECTIONS = [4 ][2 ]int {{-1 , 0 }, {0 , -1 }, {1 , 0 }, {0 , 1 }}
437+ var count int = 0
438+ 439+ func maxAreaOfIsland (grid [][]int ) int {
440+ res := 0
441+ visited := make ([][]bool , len (grid))
442+ for i := 0 ; i < len (grid); i++ {
443+ visited[i] = make ([]bool , len (grid[0 ]))
444+ }
445+ 446+ for i , rows := range grid {
447+ for j , v := range rows {
448+ if v == 1 && !visited[i][j] {
449+ // 第一种写法,重制 count,必定有 1 个
450+ count = 1
451+ dfs (grid, visited, i, j)
452+ res = max (res, count)
453+ }
454+ 455+ }
456+ }
457+ 458+ return res
459+ }
460+ 461+ // 第一种写法
462+ func dfs (grid [][]int , visited [][]bool , i , j int ) {
463+ visited[i][j] = true // 标记已访问,循环中未标记会导致重复
464+ for _ , d := range DIRECTIONS {
465+ x , y := i+d[0 ], j+d[1 ]
466+ if x < 0 || x >= len (grid) || y < 0 || y >= len (grid[0 ]) {
467+ continue
468+ }
469+ if grid[x][y] == 1 && !visited[x][y] {
470+ count++
471+ dfs (grid, visited, x, y)
472+ }
473+ }
474+ }
475+ ```
476+ 477+ dfs:版本二
478+ 479+ ``` go
480+ var DIRECTIONS = [4 ][2 ]int {{-1 , 0 }, {0 , -1 }, {1 , 0 }, {0 , 1 }}
481+ var count int = 0
482+ 483+ func maxAreaOfIsland (grid [][]int ) int {
484+ res := 0
485+ visited := make ([][]bool , len (grid))
486+ for i := 0 ; i < len (grid); i++ {
487+ visited[i] = make ([]bool , len (grid[0 ]))
488+ }
489+ 490+ for i , rows := range grid {
491+ for j , v := range rows {
492+ if v == 1 && !visited[i][j] {
493+ // 第二种写法
494+ count = 0
495+ dfs (grid, visited, i, j)
496+ res = max (res, count)
497+ }
498+ 499+ }
500+ }
501+ 502+ return res
503+ }
504+ 505+ // 第二种写法
506+ func dfs (grid [][]int , visited [][]bool , i , j int ) {
507+ if visited[i][j] || grid[i][j] == 0 {
508+ return
509+ }
510+ visited[i][j] = true
511+ count++
512+ for _ , d := range DIRECTIONS {
513+ x , y := i+d[0 ], j+d[1 ]
514+ if x < 0 || x >= len (grid) || y < 0 || y >= len (grid[0 ]) {
515+ continue
516+ }
517+ dfs (grid, visited, x, y)
518+ }
519+ }
520+ ```
521+ 522+ bfs:
523+ 524+ ``` go
525+ var DIRECTIONS = [4 ][2 ]int {{-1 , 0 }, {0 , -1 }, {1 , 0 }, {0 , 1 }}
526+ var count int = 0
527+ 528+ func maxAreaOfIsland (grid [][]int ) int {
529+ res := 0
530+ visited := make ([][]bool , len (grid))
531+ for i := 0 ; i < len (grid); i++ {
532+ visited[i] = make ([]bool , len (grid[0 ]))
533+ }
534+ 535+ for i , rows := range grid {
536+ for j , v := range rows {
537+ if v == 1 && !visited[i][j] {
538+ // 第一种写法,重制 count,必定有 1 个
539+ // count = 1
540+ // 第二种写法以及 bfs
541+ count = 0
542+ // dfs(grid, visited, i, j)
543+ bfs (grid, visited, i, j)
544+ res = max (res, count)
545+ }
546+ 547+ }
548+ }
549+ 550+ return res
551+ }
552+ 553+ // bfs
554+ func bfs (grid [][]int , visited [][]bool , i , j int ) {
555+ visited[i][j] = true
556+ count++
557+ queue := [][2 ]int {{i, j}}
558+ for len (queue) > 0 {
559+ cur := queue[0 ]
560+ queue = queue[1 :]
561+ for _ , d := range DIRECTIONS {
562+ x , y := cur[0 ]+d[0 ], cur[1 ]+d[1 ]
563+ if x < 0 || x >= len (grid) || y < 0 || y >= len (grid[0 ]) {
564+ continue
565+ }
566+ if grid[x][y] == 1 && !visited[x][y] {
567+ count++
568+ queue = append (queue, [2 ]int {x, y})
569+ visited[x][y] = true
570+ }
571+ }
572+ }
573+ }
574+ ```
431575
432576### Rust
433577
0 commit comments