卫星图片分为wxH个方格。,表示格子是建筑

1737 -- 卫星图片
Description
Smart得到了他家的卫星图片,图片可分为W×H个方格,"*"表示这个格子是一座建筑,"."表示这个格子是空地。除了在边界上的格子,每个格子在上下左右四个方向上有邻居,如果两个相邻的格子上都有建筑,那么这两个建筑就是连在一起了。Smart想知道,他家最大的一片连续建筑占据了多

img

和这个问题类似
只不过它的输入数据是01,你是点和星

【以下回答由 GPT 生成】

问题解决方案如下:

  1. 首先,我们可以将卫星图片表示为一个二维字符数组。我们可以创建一个二维数组,并从文件或用户输入中读取卫星图片数据。
#include <iostream>
#include <fstream>
#include <vector>

// 读取卫星图片数据
std::vector<std::vector<char>> readSatelliteImage(const std::string& filename) {
    std::ifstream file(filename);
    std::vector<std::vector<char>> image;
    std::string line;

    if (file) {
        while (std::getline(file, line)) {
            std::vector<char> row;
            for (char c : line) {
                row.push_back(c);
            }
            image.push_back(row);
        }
    }

    return image;
}
  1. 接下来,我们需要实现一个函数来计算最大连续建筑占据的格子数量。我们可以使用深度优先搜索(DFS)算法来完成此任务。
// 使用DFS计算最大连续建筑占据的格子数量
int calculateMaxBuildingSize(std::vector<std::vector<char>>& image, int row, int col) {
    if (row < 0 || col < 0 || row >= image.size() || col >= image[0].size() || image[row][col] != '*') {
        return 0;
    }

    image[row][col] = '.';  // 将已经计算过的建筑格子标记为".",避免重复计算

    int size = 1;  // 当前建筑格子的大小,初始为1

    // 递归地计算上下左右相邻的建筑格子的大小,并将其加到总大小中
    size += calculateMaxBuildingSize(image, row - 1, col);  // 上方格子
    size += calculateMaxBuildingSize(image, row + 1, col);  // 下方格子
    size += calculateMaxBuildingSize(image, row, col - 1);  // 左方格子
    size += calculateMaxBuildingSize(image, row, col + 1);  // 右方格子

    return size;
}
  1. 最后,我们可以编写一个主函数来调用上述函数并输出结果。
int main() {
    std::string filename = "satellite_image.txt";
    std::vector<std::vector<char>> image = readSatelliteImage(filename);

    int maxBuildingSize = 0;  // 最大连续建筑占据的格子数量

    // 遍历所有格子,找到最大的连续建筑占据的格子数量
    for (int row = 0; row < image.size(); row++) {
        for (int col = 0; col < image[0].size(); col++) {
            if (image[row][col] == '*') {
                int buildingSize = calculateMaxBuildingSize(image, row, col);
                if (buildingSize > maxBuildingSize) {
                    maxBuildingSize = buildingSize;
                }
            }
        }
    }

    std::cout << "最大连续建筑占据的格子数量为:" << maxBuildingSize << std::endl;

    return 0;
}

希望这个解决方案对你有帮助!如果你有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^