给定一个用 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
import java.util.*; public class Solution { int now=0; int max=0; /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型二维数组 * @return int整型 */ public int maxAreaIsland (int[][] grid) { // write code here for(int i=0;i<grid.length;i++){ for(int j=0;j<grid[i].length;j++){ if(grid[i][j]==1){ dfs(grid,i,j); } now=0; } } return max; } public void dfs(int[][] grid,int x,int y){ if(now>max){ max=now; } if(x>=0&&x<grid.length&&y>=0&&y<grid[0].length&&grid[x][y]==1){ now++; grid[x][y]=0; dfs(grid,x+1,y); dfs(grid,x-1,y); dfs(grid,x,y+1); dfs(grid,x,y-1); } } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型二维数组 * @return int整型 */ int [][] visited; int [][] disrs = new int[][] {{0,1},{0,-1},{1,0},{-1,0}}; public int maxAreaIsland (int[][] grid) { // write code here //深度优先遍历 int n = grid.length; //行 int m = grid[0].length; //列 visited = new int[n][m]; int maxSquare = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(grid[i][j] != '0' && visited[i][j] != 1) { maxSquare = Math.max(dfs(grid,i,j,n,m),maxSquare); } } } return maxSquare; } public int dfs(int[][] grid,int x, int y,int n,int m) { int square = 0; if(x < 0 || y < 0 || x >= n || y >= m) { return 0; } if(grid[x][y] == 0) { return 0; } if(visited[x][y] == 1) { //表示已经1遍历过,就不再计算。 return 0; } visited[x][y] = 1; square++; for(int i = 0; i < 4; i++) { int nextX = x + disrs[i][0]; int nextY = y + disrs[i][1]; square += dfs(grid,nextX,nextY,n,m); } return square; } }
static int c=0; public int maxAreaIsland (int[][] grid) { int m=0; for(int i=0;i<grid.length;i++){ for(int j=0;j<grid[0].length;j++){ if(grid[i][j]==1){ dfs(i,j,grid); m=Math.max(m,c); c=0; } } } return m; } void dfs(int x, int y, int[][] grid){ if(x<0 || y<0 || x>=grid.length || y>=grid[0].length)return; if(grid[x][y]==0)return; c++; grid[x][y]=0; dfs(x+1,y,grid); dfs(x,y+1,grid); dfs(x,y-1,grid); dfs(x-1,y,grid); }