当前位置:   article > 正文

面试必考真题-算法篇:给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻_给一个01矩阵,1代表陆地

给一个01矩阵,1代表陆地

面试必考真题-算法篇 牛客网


dfs bfs 搜索

题目描述
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。

题目分析:
同样的代码在牛客上会报栈溢出错误!!但是在leetcode上可以AC!!
同样的代码在牛客上会报栈溢出错误!!但是在leetcode上可以AC!!
同样的代码在牛客上会报栈溢出错误!!但是在leetcode上可以AC!!

利用dfs进行遍历,当找到陆地之后,向这个位置的上下左右继续寻找,如果依然找到陆地,则将矩阵中该位置代表陆地的’1’修改为’0’。这样,在之后的遍历中则不会再次计算该处陆地。

下面是Java代码

class Solution {
    public int numIslands(char[][] grid) {

        int lands = 0;
        int N = grid.length;
        int M = grid[0].length;
        for(int i = 0 ; i< N;i++){
            for(int j = 0;j<M;j++){
                if(grid[i][j] == '1'){
                    ++lands;
                    dfs(grid,i,j);
                }
            }
        }
        return lands;

    }

    private void dfs(char[][] grid,int i , int j){
        grid[i][j] ='0';
        if(i-1>=0 && grid[i-1][j]=='1'){
            dfs(grid,i-1,j);
        }
        if(i+1 < grid.length && 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 < grid[0].length && grid[i][j+1] == '1'){
            dfs(grid,i,j+1);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

参考https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e?tpId=190&&tqId=35229&rp=1&ru=/ta/job-code-high-rd&qru=/ta/job-code-high-rd/question-ranking

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号