方法一: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;
}
}


京公网安备 11010502036488号