c++寻找最大岛问题代码
时间: 2024-10-05 22:01:53 浏览: 26
在C++中,寻找图中最大数据的岛屿通常涉及到深度优先搜索(DFS)算法,因为岛屿可以用邻接矩阵或邻接列表表示的二维图来描述。这里是一个简单的示例,展示了如何使用DFS来解决这个问题:
```cpp
#include <vector>
using namespace std;
// 定义节点的结构体
struct Node {
int row, col;
};
// 判断当前位置是否有效
bool isValid(vector<vector<int>>& grid, int r, int c) {
return r >= 0 && r < grid.size() && c >= 0 && c < grid[0].size() && grid[r][c] == 1;
}
// 递归函数,标记路径并返回当前岛屿的最大尺寸
int dfs(vector<vector<int>>& grid, vector<Node>& visited, int r, int c, int& maxArea) {
if (!isValid(grid, r, c)) return 0; // 如果位置无效,返回
if (visited[r][c]) return 0; // 如果已访问过,跳过
visited[r][c] = true; // 标记为已访问
int area = 1; // 当前岛屿大小
// 检查邻居
for (int dr = -1; dr <= 1; ++dr)
for (int dc = -1; dc <= 1; ++dc) {
int newR = r + dr, newC = c + dc;
area += dfs(grid, visited, newR, newC, maxArea);
}
// 更新最大面积
if (area > maxArea)
maxArea = area;
return area;
}
// 寻找给定网格中最大的岛屿
int maxAreaOfIsland(vector<vector<int>>& grid) {
int rows = grid.size(), cols = grid[0].size();
vector<Node> visited(rows * cols, {0, 0}); // 初始化访问数组
int maxArea = 0;
// 遍历所有未访问的位置
for (int r = 0; r < rows; ++r)
for (int c = 0; c < cols; ++c)
if (grid[r][c] == 1) // 如果遇到水位线外的格子
dfs(grid, visited, r, c, maxArea);
return maxArea;
}
```
阅读全文