每日一题-----岛屿问题(第一天)

每日一题-----岛屿问题(第一天)_第1张图片

问题分析:题目要求是要找到矩阵中“岛屿的数量”,什么是岛屿呢?上下左右相连有1的都被认为是连续岛屿,比如示例1中只有一个岛屿,因为你随便从一个1出发可以到达其他所以1。

解题思路:

     dfs方法:社目前指针指向一个岛屿中的某一点(i,j),然后从该点出发寻找岛屿的边界

  从(i,j)向上下左右(i+1,j),(i-1,j),(i,j+1),(i,j-1)做深度搜索。

    终止条件(剪枝条件)

       (i,j)越过矩阵的边界

          grid[i][j]==0,代表次分支已经越过了岛屿的边界,已经到了水的范围

   搜索岛屿的同时,执行grid[i][j]='0',把这一块岛屿的所有节点清楚,以免进行重复搜索

代码示例

class Solution {
    //利用深度递归解决,可以看图,并加记住这个模板,他可以解决岛屿中的问题,还有一题岛屿面积问题也是这个模板。
    public int numIslands(char[][] grid) {
        //定义一个表示岛屿数量的变量
        int count = 0;
        //这个两层for循环是用来遍历整张二维表格中所有的陆地
        //其中 i 表示行,j 表示列
        for(int i = 0; i=grid.length||j>=grid[0].length||grid[i][j]=='0') return;
        //将遍历过的陆地改为海洋,防止重复遍历
        grid[i][j]='0';
        //上,
        dfs(grid,i+1,j);
        //下
        dfs(grid,i-1,j);
        //右
        dfs(grid,i,j+1);
        //左
        dfs(grid,i,j-1);
    }
}

你可能感兴趣的:(每日一题,java,深度优先,开发语言,数据结构)