岛屿

力扣LeetCode: 岛屿数量

邮差的信 提交于 2019-11-26 16:12:52
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3 读题: 1是陆地,0是水,1只有上下左右四个方向有1才能连接 思路: 广度优先搜索,递归 双层for循环找到第一块陆地,陆地数加1,然后搜索陆地上下左右四个方向,搜索到水停止,搜索到边界停止,为了避免重复搜索,将搜索过的陆地标记为’0’,可以理解为在指定区域搜索陆地,找到一块陆地计数1,然后将该陆地击沉到海底,然后继续寻找其他陆地 以下是代码: class Solution { public int numIslands ( char [ ] [ ] grid ) { //初始化岛屿数量 int island = 0 ; // 如果二维数组为空,则返回0 if ( grid . length == 0 ) { return 0 ; } // 以二维数组长度为行数,第一个数组长度为列数,开始广度遍历,为了避免重复遍历,已经遍历的赋值为0 int rows = grid . length ; int cols = grid [ 0 ] .