岛屿数量

Posted xiao--ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了岛屿数量相关的知识,希望对你有一定的参考价值。

给定一个由 ‘1‘(陆地)和 ‘0‘(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例1:
输入:
11110
11010
11000
00000

输出: 1
示例2:
输入:
11000
11000
00100
00011

输出: 3

解题思路:

本题是Leetcode中的一道BFS算法题,采用BFS算法,遍历整个数组,遇到陆地时将其放入队列中,遍历完与其向相连的所有大陆,并将遍历过的陆地清除(置为‘0’)。

C++代码:

 1 class Solution {
 2 public:
 3     int numIslands(vector<vector<char>>& grid) {
 4         if(grid.empty())return 0;
 5         queue<pair<int,int>> que;
 6         int result = 0;
 7         int que_i=0,que_j=0;
 8         int grid_list_size = grid.size();
 9         int grid_line_size = grid[0].size();
10         //寻找一个陆地作为起始点
11         for(int i=0;i<grid_list_size;i++)
12         {
13             for(int j=0;j<grid_line_size;j++)
14             {
15                 if(grid[i][j]==1)
16                 {
17                     que.push(pair<int,int>(i,j));
18                     grid[i][j] = 0;
19                     result++;
20                     //遍历完整块岛屿
21                     while(!que.empty())
22                     {
23                         que_i = que.front().first;
24                         que_j = que.front().second;
25                         que.pop();
26                         //上下判断
27                         for(int a=-1;a<=1;a+=2)
28                         {
29                             //边界限定
30                             if(que_i+a>=0&&que_i+a<grid_list_size)
31                             {
32                                 if(grid[que_i+a][que_j]==1)
33                                 {
34                                     que.push(pair<int,int>(que_i+a,que_j));
35                                     grid[que_i+a][que_j] =0;
36                                 }
37                             }
38                         }
39                         //左右判断
40                         for(int a=-1;a<=1;a+=2)
41                         {
42                             //边界限定
43                             if(que_j+a>=0&&que_j+a<grid_line_size)
44                             {
45                                 if(grid[que_i][que_j+a]==1)
46                                 {
47                                     que.push(pair<int,int>(que_i,que_j+a));
48                                     grid[que_i][que_j+a] =0;
49                                 }
50                             }
51                         }
52                     }
53                 }
54             }
55         }
56         return result;
57     }
58 };

 

以上是关于岛屿数量的主要内容,如果未能解决你的问题,请参考以下文章

岛屿问题(岛数量/孤岛/面积/周长)

Java 求解岛屿数量

java刷题--200岛屿数量

岛屿数量

LeetCode 200. 岛屿数量

精选力扣500题 第41题 LeetCode 200. 岛屿数量c++/java详细题解