酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

方馆长是一位著名的探险家,他最近发现了一个神秘的岛屿。这个岛屿被划分为 n x m 的网格区域,每个区域可能是陆地(用 1 表示)或水域(用 0 表示)。方馆长发现,陆地区域可以形成“领地”,领地是由相邻的陆地区域组成的区域,相邻的区域包括上下左右四个方向。 方馆长想知道,这个岛屿上总共有多少个独立的领地。为了帮助他完成这个任务,请你编写一个程序,计算岛屿上领地的数量。c++;

# 岛屿领地数量计算程序 (C++) 以下是使用深度优先搜索(DFS)算法解决这个问题的C++实现: ```cpp #include <vector> #include <iostream> using namespace std; void dfs(vector<vector<int>>& grid, int i, int j) { // 边界检查或当前不是陆地 if (i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size() || grid[i][j] != 1) { return; } // 标记当前陆地已访问 grid[i][j] = -1; // 向四个方向搜索 dfs(grid, i + 1, j); dfs(grid, i - 1, j); dfs(grid, i, j + 1); dfs(grid, i, j - 1); } int countTerritories(vector<vector<int>>& grid) { if (grid.empty() || grid[0].empty()) { return 0; } int count = 0; int rows = grid.size(); int cols = grid[0].size(); for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { if (grid[i][j] == 1) { ++count; dfs(grid, i, j); } } } return count; } int main() { // 示例输入 vector<vector<int>> grid = { {1, 1, 0, 0, 0}, {1, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 1} }; cout << "领地数量: " << countTerritories(grid) << endl; return 0; } ``` ## 代码说明: 1. `dfs`函数实现深度优先搜索,用于标记和访问所有相连的陆地 2. `countTerritories`函数遍历整个网格,每当发现未访问的陆地(值为1)时,增加计数并启动DFS 3. 主函数提供了一个示例网格并输出领地数量 ## 注意事项: 1. 输入网格会被修改,因为DFS会标记已访问的陆地。如果需要保留原始数据,应该先创建副本。 2. 对于非常大的网格,DFS可能导致栈溢出,可以考虑使用BFS或迭代式DFS。 3. 该算法的时间复杂度是O(n×m),因为每个网格单元最多被访问一次。 [2025-03-29 10:15:29 | AI写代码神器 | 567点数解答]

相关提问