题解 | #岛屿数量#
岛屿数量
https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
总结:
1.根据题意可知,每找到一个连通分量就是一个岛屿。所以可以使用循环访问所有的点,每找到一个未被访问且值为1的点就是一个连通分量,岛屿数就加1.找到一个岛屿后就使用深度优先搜索把岛上所有的点遍历一遍,标记为已访问。
import java.util.*; public class Solution { /** * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */ boolean[][] visited; public int solve (char[][] grid) { // write code here int rowNum = grid.length; int colNum = grid[0].length; visited = new boolean[rowNum][colNum]; int num = 0;//岛屿数量 for(int i=0;i<rowNum;i++) for(int j=0;j<colNum;j++){ if((!visited[i][j])&&grid[i][j]=='1'){ dfs(grid,i,j,rowNum,colNum); num++; } } return num; } public void dfs(char[][] grid,int i,int j,int rowNum,int colNum){ visited[i][j]=true; if(j-1>=0 && grid[i][j-1]=='1'&&(!visited[i][j-1])) dfs(grid,i,j-1,rowNum,colNum);//向左找 if(j+1<colNum && grid[i][j+1]=='1'&&(!visited[i][j+1])) dfs(grid,i,j+1,rowNum,colNum);//向右找 if(i-1>=0 && grid[i-1][j]=='1'&&(!visited[i-1][j])) dfs(grid,i-1,j,rowNum,colNum);//向下找 if(i+1<rowNum && grid[i+1][j]=='1'&&(!visited[i+1][j])) dfs(grid,i+1,j,rowNum,colNum);//向下找 } }