岛屿数量

给定一个由 ‘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 };

原文地址:https://www.cnblogs.com/xiao--ge/p/12546106.html

时间: 2024-08-30 18:05:07

岛屿数量的相关文章

LeetCode | 0200. Number of Islands岛屿数量【Python】

LeetCode 0200. Number of Islands岛屿数量[Medium][Python][DFS] Problem LeetCode Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or v

【leetcode-200 深度优先+广度优先】 岛屿数量

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入:11110110101100000000 输出: 1示例 2: 输入:11000110000010000011 输出: 3 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-islands 方法一:深度优先搜索 [通过]直觉 将

LeetCode | 200. 岛屿数量

原题(Medium): 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 思路:递归 这题类型跟我们之前做过的一题单词搜索类似.所以我在看到这题之后,就想到了可以用与之相同的思路:建立一个代表搜索方向的数组,在当前坐标下,如果往某个方向移动一格是符合一定条件的,就往该方向移动一格,且是递归形式的移动.在这里条件就是不超越边界,且该方向上有岛屿可供移动,且是未被访问过

DFS或BFS(深度优先搜索或广度优先搜索遍历无向图)-04-无向图-岛屿数量

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入:11110110101100000000 输出: 1示例 2: 输入:11000110000010000011 输出: 3 1 class Solution { 2 public: 3 int dist[4][2] = {0,1,0,-1,1,0,-1,0}; 4 queue<pair<int,i

树和图(leetcode) : 岛屿数量

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3 解答(C++): class Solution { public: //广度优先搜索 void dfs(vector<vector<char>>

leetcode 200. 岛屿数量(dfs||bfs)

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入:11110110101100000000 输出: 1示例 2: 输入:11000110000010000011 输出: 3 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-islands class Solution { pu

51nod 1276 1276 岛屿的数量 (很好玩的题目

题意: 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没.原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下. 给出N个岛的高度.然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿.例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}. 当海面高度为0时,所有的岛形成了1个岛屿. 当海面高度为1时,岛1会被淹没,总共有2个岛屿{2} {3, 2, 3}. 当

[LeetCode] Number of Islands II 岛屿的数量之二

A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand operation which turns the water at position (row, col) into a land. Given a list of positions to operate, count the number of islands after each addLand o

51NOD 1276 岛屿的数量(脑洞 + 思维)

传送门 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没.原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下. 给出N个岛的高度.然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿.例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}. 当海面高度为0时,所有的岛形成了1个岛屿. 当海面高度为1时,岛1会被淹没,总共有2个岛屿{2} {3, 2, 3}. 当