给定一个用 n*m 矩阵表示的群岛的地图,其中 1 表示岛屿, 0 表示海洋,每个岛屿的水平或竖直方向相邻的岛屿可以视为连在一起的岛屿,每一块岛屿视为面积为 1 ,请问面积最大的岛屿是多少。
例如:
当输入[[1,0],[0,1]]时,对应的地图为:
只有在水平或竖直方向相邻的岛屿可以连在一起,所以每个岛屿互相独立。最大面积是1
当输入[[1,1],[1,0]]时,对应的地图为:
三块岛屿可以连在一起,最大面积是3
数据范围:
[[1,0],[0,1]]
1
如题面解释
[[1,1],[1,0]]
3
如题面解释
[[0]]
0
package main import _"fmt" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型二维数组 * @return int整型 */ func maxAreaIsland( grid [][]int ) int { n,m:=len(grid),len(grid[0]) cnt:=0 var dfs func(int,int) dfs=func(i,j int){ if i<0||i>=n||j<0||j>=m||grid[i][j]==0{ return } grid[i][j]=0 cnt++ dfs(i+1,j) dfs(i,j+1) dfs(i-1,j) dfs(i,j-1) } ans:=0 for i:=0;i<n;i++{ for j:=0;j<m;j++{ if grid[i][j]==1{ cnt=0 dfs(i,j) if cnt>ans{ ans=cnt } } } } return ans }
func maxAreaIsland( grid [][]int ) (max int) { row, col := len(grid), len(grid[0]) var dfs func(int, int) int dfs = func(x, y int) int { if x < 0 || x >= row || y < 0 || y >= col || grid[x][y] == 0 { return 0 } grid[x][y]=0 return dfs(x+1, y) + dfs(x, y+1) + dfs(x-1, y) + dfs(x, y-1) + 1 } for x:=0; x < row; x++ { for y:=0; y < col; y++ { if grid[x][y] == 1 { tmp := dfs(x, y) if tmp > max { max = tmp } } } } return }