原理
简单粗暴的说就是,从原点出发,朝着不同路去寻找宝藏,如果第一条路走到底后发现没有宝藏,那就退回原点,朝着第二条路继续走....
例题
解题思路:
1.遍历grid矩阵
2.从遇到第一个陆地开始,便以第一个陆地为原点进行深度搜索遍历
3.从相邻陆地进行延伸,将通过延伸搜索到的陆地进行标记(延伸过就标记为0)
代码:
class Solution {
public int numIslands(char[][] grid) {
int ans=0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){ //遍历矩阵
if(grid[i][j]=='1'){ //初步搜索,确定原点
dfs(grid,i,j);
ans++;
}
}
}
return ans;
}
public void dfs(char[][] grid,int x,int y){ //深度搜索
if(x < 0 || x >= grid.length ||y < 0 || y >= grid[0].length || grid[x][y] != '1'){
return ; //边界值条件判断
}
grid[x][y]=0; //对遍历过的点进行标记
dfs(grid,x+1,y);
dfs(grid,x-1,y);
dfs(grid,x,y+1);
dfs(grid,x,y-1);
}
}