classSolution{
publicintnumIslands(char[][] grid){
//DFS,设置一个数组记录是否被访问过//遍历到一个陆地就进行dfs,land数量加1int num =0;int n = grid.length;int m = grid[0].length;boolean[][] isVisited =newboolean[n][m];for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!isVisited[i][j]&& grid[i][j]=='1'){
num++;dfs(grid,isVisited,i,j);}}}return num;}publicvoiddfs(char[][] grid,boolean[][] isVisited,int x,int y){
if(x<0|| x>=grid.length || y<0|| y>=grid[0].length){
return;}if(isVisited[x][y]|| grid[x][y]=='0'){
return;}
isVisited[x][y]=true;int[][] loc =newint[][]{
{
-1,0},{
1,0},{
0,-1},{
0,1}};for(int i=0;i<4;i++){
int xTmp = x+loc[i][0];int yTmp = y+loc[i][1];dfs(grid,isVisited,xTmp,yTmp);}}}
3. 695【岛屿的最大面积】
题目: 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
代码:
classSolution{
publicintmaxAreaOfIsland(int[][] grid){
//先用dfs找到岛屿,计算每个岛屿的面积//记录最大值int m = grid.length;int n = grid[0].length;boolean[][] isVisited =newboolean[m][n];int max =0;for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(!isVisited[i][j]&& grid[i][j]==1){
int tmp =dfs(grid,isVisited,i,j);
max =Math<