方法一:dfs深度优先遍历
题中岛屿是相互连接的1组成的,而要判断岛屿个数就需要挨个遍历,为防止多个1重复判断,就要把与当前1相邻的所有1都设为0,在判断某个方向是否为1时,又要再往下判断其相邻的情况,在遍历完所有相邻的情况后,再回溯,因此用到深度遍历递归调用的方法。
步骤:
- 首先,判断矩阵是否为空。
- 然后,遍历矩阵,判断是否为1,是则计数加一,再调用dfs函数。
- dfs函数中,先将i,j位置设为0,再判断相邻的位置是否为1,是则递归调用dfs。
import java.util.*; public class Solution { public void dfs(char[][] grid,int i,int j){ int n=grid.length; int m=grid[0].length; grid[i][j]='0'; if(i-1>=0&&grid[i-1][j]=='1'){ dfs(grid,i-1,j); } if(i+1<n&&grid[i+1][j]=='1'){ dfs(grid,i+1,j); } if(j-1>=0&&grid[i][j-1]=='1'){ dfs(grid,i,j-1); } if(j+1<m&&grid[i][j+1]=='1'){ dfs(grid,i,j+1); } } public int solve (char[][] grid) { if(grid.length==0){ return 0; } int count=0; for(int i=0;i<grid.length;++i){ for(int j=0;j<grid[0].length;++j){ if(grid[i][j]=='1'){ count++; //调用dfs函数将其相邻且为1的位置都置为0. dfs(grid,i,j); } } } return count; } }