如何用C++计算由表格文件输入的岛屿面积问题并举例说明
时间: 2024-03-21 22:39:31 浏览: 13
下面是一个使用C++实现的计算岛屿面积的例子:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int dfs(vector<vector<int>>& grid, int i, int j) {
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] == 0) {
return 0;
}
grid[i][j] = 0;
int area = 1;
area += dfs(grid, i + 1, j);
area += dfs(grid, i - 1, j);
area += dfs(grid, i, j + 1);
area += dfs(grid, i, j - 1);
return area;
}
int count_islands(vector<vector<int>>& grid) {
int count = 0;
for (int i = 0; i < grid.size(); ++i) {
for (int j = 0; j < grid[0].size(); ++j) {
if (grid[i][j] == 1) {
int area = dfs(grid, i, j);
if (area > 0) {
count++;
}
}
}
}
return count;
}
int main() {
// 读取表格文件,例如:
// 1 1 0 0 0
// 1 1 0 0 0
// 0 0 1 0 0
// 0 0 0 1 1
vector<vector<int>> grid = {{1, 1, 0, 0, 0}, {1, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 1}};
int count = count_islands(grid);
cout << count << endl; // 输出:3
return 0;
}
```
在这个例子中,我们使用了一个 `dfs` 函数来遍历岛屿并计算面积。具体来说,我们从一个陆地位置开始,递归地向上下左右四个方向遍历整个岛屿,将遍历过的陆地标记为已访问,最后返回岛屿的面积。
我们可以将输入数据存储在一个二维向量中,例如:
```cpp
vector<vector<int>> grid = {{1, 1, 0, 0, 0}, {1, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 1}};
```
其中,数字 1 表示陆地,数字 0 表示海洋。使用 `count_islands` 函数计算该二维向量中的岛屿数量:
```cpp
int count = count_islands(grid);
cout << count << endl; // 输出:3
```
在上面的例子中,二维向量中有三个岛屿,因此输出结果为 3。