• 岛屿数量-LeetCode


    题目描述

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

    示例1:

    输入 :

    [
    ['1','1','1','1','0'],
    ['1','1','0','1','0'],
    ['1','1','0','0','0'],
    ['0','0','0','0','0']
    ]

    输出:1

    示例2:

    输入:
    [
    ['1','1','0','0','0'],
    ['1','1','0','0','0'],
    ['0','0','1','0','0'],
    ['0','0','0','1','1']
    ]
    输出: 3

    思路:深度优先搜索

    对每一个可能的元素(input[m][n]==1)深入(上下左右方位)到不能再深入为止(一步步递归进行),而且每个节点只能访问一次。

    为什么要进行向左和向上的搜索呢?因为在递归时,走到了右面(倒T型道路右面)所以要向上,走到了的下面(T型道路下面)要向左。

    public class Main {public int numIslands(char[][] grid) {
            if (grid.length == 0) return 0;
            int count = 0;
            boolean[][] isVisited = new boolean[grid.length][grid[0].length];
            for (int m = 0; m < grid.length; m++) {
                for (int n = 0; n < grid[0].length; n++) {
                    if (grid[m][n] == '1' && isVisited[m][n] == false) {
                        deepSearch(m, n, grid, isVisited);
                        count++;
                    }
                }
            }
            return count;
        }
    
        private void deepSearch(int m, int n, char[][] grid, boolean[][] isVisited) {
            isVisited[m][n] = true;
            if ( n+1 < grid[0].length){
                if (grid[m][n + 1] == '1' && isVisited[m][n + 1] == false) {
                    deepSearch(m, n + 1, grid, isVisited);
                }
            }
    
            if ( n-1 > -1){
                if (grid[m][n - 1] == '1' && isVisited[m][n - 1] == false) {
                    deepSearch(m, n - 1, grid, isVisited);
                }
            }
    
            if ( m+1 < grid.length){
                if (grid[m + 1][n] == '1' && isVisited[m + 1][n] == false) {
                    deepSearch(m + 1, n, grid, isVisited);
                }
            }
    
            if ( m - 1 > -1){
                if (grid[m - 1][n] == '1' && isVisited[m - 1][n] == false) {
                    deepSearch(m - 1, n, grid, isVisited);
                }
            }
        }
    
    }

     LeetCode:https://leetcode-cn.com/problems/number-of-islands/

  • 相关阅读:
    [转] Linux下crontab命令的用法
    [转] Try to use one var statement per scope in JavaScript
    [转] 主流JS框架中DOMReady事件的实现
    MySQL 表复制语句
    [转] MySQL中的运算符展示
    [转] mysql分组取每组前几条记录(排名)
    MySQL 连接结果集
    [转] mysql show processlist命令 详解
    [转] mysql 5.0存储过程学习总结
    jquery中使用event.target的几点
  • 原文地址:https://www.cnblogs.com/iuyy/p/13413246.html
Copyright © 2020-2023  润新知