复制
收藏
提问
简洁

若海域由一个主岛和一些附属岛屿组成,海域可由一个n×n的方阵表示,矩阵中的数字表示相应主岛或岛屿的海拔:数字1~9表示陆地,数字0表示海洋。 现在A君打算在某个岛屿或主岛上探险,他的飞机将会降落在海域坐标为(x, y)的陆地上,请你计算A君降落点所在岛屿或主岛的面积有多大,此处将面积定义为满足4连通的格子有多少个,4连通即为将与A君降落点上下左右相邻接的陆地均视为同一岛屿或主岛。 【输入形式】 输入一行包含3个整型数据,第一个用于表示海域的总面积,即n行n列(1<=n<=30)的方形区域;后两个用于表示A君的降落点坐标x和y(1<=x, y <=n)。 【输出形式】 A君降落点所在岛屿或主岛的面积。 【样例输入】 3 1 1 1 1 0 2 1 0 0 0 0 5 2 4 0 1 1 5 0 2 2 3 1 1 2 0 0 2 0 0 1 3 1 0 1 0 1 0 0 10 6 8 1 2 1 0 0 0 0 0 2 3 3 0 2 0 1 2 1 0 1 2 4 0 1 0 1 2 3 2 0 1 3 2 0 0 0 1 2 4 0 0 0 0 0 0 0 0 1 5 3 0 0 1 2 1 0 1 5 4 3 0 0 1 2 3 1 3 6 2 1 0 0 0 3 4 8 9 7 5 0 0 0 0 0 3 7 8 6 0 1 2 0 0 0 0 0 0 0 0 1 0 【样例输出】 4 14 38 C++

3月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

要解决这个问题,我们可以使用深度优先搜索(DFS)算法来计算A君降落点所在岛屿或主岛的面积。以下是解决这个问题的步骤:

  1. 读取输入:首先,我们需要读取输入的海域总面积n,以及A君的降落点坐标(x, y)。然后,读取n×n的方阵,其中1表示陆地,0表示海洋125

  2. 初始化:创建一个与输入方阵相同大小的访问标记数组,用于记录每个单元格是否已经被访问过。

  3. DFS搜索:从A君降落点(x, y)开始,使用DFS遍历所有4连通的陆地单元格。在遍历过程中,将访问过的单元格标记为已访问,并且累加岛屿的面积。

  4. 边界检查:在DFS过程中,需要检查当前单元格是否在方阵的边界内,以及是否是陆地(即值为1)。

  5. 递归遍历:对于当前单元格的上下左右四个方向,如果发现未访问的陆地单元格,递归调用DFS函数进行遍历。

  6. 返回结果:DFS遍历完成后,返回累加的岛屿面积。

以下是C++代码实现的示例:

#include <iostream>
#include <vector>
using namespace std;

void dfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y, int n) {
    if (x < 0 || x >= n || y < 0 || y >= n || visited[x][y] || grid[x][y] == 0) {
        return;
    }
    visited[x][y] = true;
    dfs(grid, visited, x + 1, y, n); // 下
    dfs(grid, visited, x - 1, y, n); // 上
    dfs(grid, visited, x, y + 1, n); // 右
    dfs(grid, visited, x, y - 1, n); // 左
}

int calculateIslandArea(vector<vector<int>>& grid, int x, int y, int n) {
    vector<vector<bool>> visited(n, vector<bool>(n, false));
    int area = 0;
    dfs(grid, visited, x, y, n);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (visited[i][j]) {
                ++area;
            }
        }
    }
    return area;
}

int main() {
    int n, x, y;
    cin >> n >> x >> y;
    --x; --y; // 将1-based index转换为0-based index
    vector<vector<int>> grid(n, vector<int>(n));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> grid[i][j];
        }
    }
    cout << calculateIslandArea(grid, x, y, n) << endl;
    return 0;
}

这段代码首先定义了一个dfs函数,用于深度优先搜索岛屿的面积。然后定义了calculateIslandArea函数,它初始化访问标记数组,并调用dfs函数来计算面积。最后,在main函数中读取输入,调用calculateIslandArea函数,并输出结果。346910

你觉得结果怎么样?
岛屿面积计算算法
C++实现岛屿面积算法
4连通岛屿面积计算
C++中如何判断4连通
岛屿面积计算的输入输出格式
C++中如何读取矩阵数据

以上内容由AI搜集生成,仅供参考

在线客服