LeetCode //C - 200. Number of Islands

200. Number of Islands

Given an m x n 2D binary grid grid which represents a map of *'1'*s (land) and *'0'*s (water), return the number of islands.

An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input: grid = [

["1","1","1","1","0"],

["1","1","0","1","0"],

["1","1","0","0","0"],

["0","0","0","0","0"]

]
Output: 1

Example 2:

Input: grid = [

["1","1","0","0","0"],

["1","1","0","0","0"],

["0","0","1","0","0"],

["0","0","0","1","1"]

]
Output: 3

Constraints:
  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] is '0' or '1'.

From: LeetCode

Link: 200. Number of Islands


Solution:

Ideas:

1. Initialize: The numIslands function initializes the count of islands to zero. It also determines the dimensions of the grid, m (number of rows) and n (number of columns).

2. Iterate through the Grid: The code then iterates over each cell of the grid. If the current cell is '1', it indicates a part of an island that hasn't been explored yet.

3. DFS to Explore the Island: When a '1' is found, we use the dfs function to explore the entire island. The idea is that once we find a '1', we want to explore all its neighboring cells (up, down, left, and right) to see if they are also part of the same island. If they are, we continue the exploration recursively.

  • In the dfs function, if the current cell is out-of-bounds, or if it is water (i.e., '0'), we return immediately without further exploration.
  • If the current cell is '1', we mark it as visited by changing its value to '0'. This ensures that we don't count the same part of an island more than once.
  • We then recursively call dfs on the neighboring cells to continue exploring the island.

4. Counting the Islands: Each time we initiate a DFS exploration from the numIslands function (i.e., every time we find an unexplored '1'), we increment our island count by 1. By the end of the iteration over the grid, we would have explored and counted all distinct islands.

5. Return the Count: Finally, numIslands returns the count of islands.

Code:
c 复制代码
void dfs(char** grid, int i, int j, int m, int n) {
    if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0') {
        return;
    }

    grid[i][j] = '0';
    
    dfs(grid, i - 1, j, m, n); // up
    dfs(grid, i + 1, j, m, n); // down
    dfs(grid, i, j - 1, m, n); // left
    dfs(grid, i, j + 1, m, n); // right
}

int numIslands(char** grid, int gridSize, int* gridColSize) {
    if (grid == NULL || gridSize == 0 || gridColSize == NULL) {
        return 0;
    }

    int m = gridSize;
    int n = gridColSize[0];
    int islandCount = 0;
    
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (grid[i][j] == '1') {
                islandCount++;
                dfs(grid, i, j, m, n);
            }
        }
    }

    return islandCount;
}
相关推荐
田梓燊5 分钟前
湘潭大学软件工程算法设计与分析考试复习笔记(五)
笔记·算法·软件工程
m0_7482329228 分钟前
JVM的内存区域划分
java·jvm·算法
꧁༺△再临ཊ࿈ཏTSC△༻꧂42 分钟前
K1 升班测试卷(C++ 4道题)
算法
硕风和炜1 小时前
【LeetCode: 743. 网络延迟时间 + Dijkstra】
java·算法·leetcode·面试·dijkstra·最短路径
码农飞飞1 小时前
详解Rust字符串用法
开发语言·算法·rust·string·所有权·字符串用法
icesmoke2 小时前
Codeforces Round 987 (Div. 2)(A-D)
数据结构·c++·算法
大佬,救命!!!2 小时前
自动化unittest框架
开发语言·笔记·python·算法·pycharm·自动化·unittest
drebander2 小时前
建造者模式Builder——优雅的使用姿势
java·算法·建造者模式
搞笑症患者2 小时前
LeetCode Hot100 - 矩阵篇
算法·leetcode·矩阵
Peter_chq2 小时前
【计算机网络】数据链路层
linux·c语言·开发语言·网络·c++·后端·网络协议