目录
1.岛屿数量
200. 岛屿数量 - 力扣(LeetCode)
https://leetcode.cn/problems/number-of-islands/description/
cpp
class Solution {
public:
void dfs(vector<vector<char>>& grid, int r, int c) {
int nr = grid.size();
int nc = grid[0].size();
// 检查边界条件和是否为陆地
if (r < 0 || c < 0 || r >= nr || c >= nc || grid[r][c] == '0') {
return;
}
// 标记当前陆地为已访问(置为'0')
grid[r][c] = '0';
// 递归访问相邻的四个方向
dfs(grid, r - 1, c); // 上
dfs(grid, r + 1, c); // 下
dfs(grid, r, c - 1); // 左
dfs(grid, r, c + 1); // 右
}
int numIslands(vector<vector<char>>& grid) {
if (grid.empty() || grid[0].empty())
return 0;
int nr = grid.size(); // 行数
int nc = grid[0].size(); // 列数
int count = 0; // 岛屿计数
for (int r = 0; r < nr; ++r) {
for (int c = 0; c < nc; ++c) {
if (grid[r][c] == '1') {
++count;
dfs(grid, r, c);
}
}
}
return count;
}
};
a.核心思想
利用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历二维网格,将相邻的陆地标记为已访问,每次遇到新的未访问的陆地就表示发现一个新的岛屿。
b.思路
遍历二维网格中的每一个点,当遇到陆地(值为
'1')且未被访问过时,启动 DFS 或 BFS 来标记所有与之相连的陆地为已访问,同时岛屿数量加 1。
c.步骤
① 初始化一个与网格大小相同的二维数组
visited来记录每个点是否被访问过,或者直接修改原网格来标记已访问(将访问过的陆地置为'0')。② 遍历二维网格,对于每个点:如果该点是陆地且未被访问过,进行 DFS 或 BFS 遍历所有相连的陆地并标记为已访问,同时岛屿数量加 1。
③ 返回岛屿数量。
2.C语言中extern关键字的作用
在C语言中,
extern关键字用于声明变量或函数为外部链接,表示该变量/函数的定义在其他编译单元(如另一个源文件)中,当前文件仅引用它。其核心作用是解决跨文件的全局符号访问问题,不分配内存,仅声明存在性。
希望这些内容对大家有所帮助!
感谢大家的三连支持!