复制
收藏
提问
简洁
若海域由一个主岛和一些附属岛屿组成,海域可由一个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君降落点所在岛屿或主岛的面积。以下是解决这个问题的步骤:
-
读取输入:首先,我们需要读取输入的海域总面积n,以及A君的降落点坐标(x, y)。然后,读取n×n的方阵,其中1表示陆地,0表示海洋125。
-
初始化:创建一个与输入方阵相同大小的访问标记数组,用于记录每个单元格是否已经被访问过。
-
DFS搜索:从A君降落点(x, y)开始,使用DFS遍历所有4连通的陆地单元格。在遍历过程中,将访问过的单元格标记为已访问,并且累加岛屿的面积。
-
边界检查:在DFS过程中,需要检查当前单元格是否在方阵的边界内,以及是否是陆地(即值为1)。
-
递归遍历:对于当前单元格的上下左右四个方向,如果发现未访问的陆地单元格,递归调用DFS函数进行遍历。
-
返回结果: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
你觉得结果怎么样?