算法-深度优先遍历DFS

 思想:从root节点开始,尽可能深的搜索每一个分支,把一个分支的结果搜索完了以后,再去看下一个分支。

例子:走迷宫

走一条路到终点,再去走其他的路

class Solution {
    public int numIslands(char[][] grid) {
//当二位数组为空的时候,岛屿肯定是0
        if(grid == null){
            return 0;
        }
//统计岛屿数
        int result=0;
//从头遍历二位数组,目的是遍历"1",当遍历到”1“的时候调用传染函数
        for(int i =0;i<grid.length;i++){
            for(int j=0;j<grid[0].length;j++){
                if(grid[i][j]=='1'){
//岛屿数加1
                    result++;
//调用感染函数,把行,列,二维数组作为参数传过去
                    dfs(i,j,grid);
                }
            }
        }
//岛屿数
                return result;
    }
//感染函数,用到的思想是深度优先遍历
        public int dfs(int i,int j,char[][] grid){
//当行或列不合法(小于0或超出范围)或对应的值是0(说明是海洋),就返回上一层
            if(i<0||i>=grid.length||j<0||j>=grid[0].length||grid[i][j]=='0'){
            return 0;
            }
//使其变成”0“,这样前面遍历的时候就不会遍历到这个数,也就不会将其计入岛屿数
            grid[i][j]='0';
//将上下左右相连的数组的数全变成”0“并对继续向下递归
            dfs(i,j+1,grid);
            dfs(i+1,j,grid);
            dfs(i-1,j,grid);
            dfs(i,j-1,grid);
//返回上一次层
            return 0;
        }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值