卡码网KamaCoder 106. 岛屿的周长

题目来源:106. 岛屿的周长

C++题解1:遍历一遍,找每个单元格的临水周长。

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N, M; cin>>N>>M;
    vector<vector<int>> grid(N, vector<int>(M, 0));
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < M; j++) {
            cin>>grid[i][j];
        }
    }
    
    int res = 0;
    for(int i = 0; i < N; i++) {  // 中间
        for(int j = 0; j < M; j++) {
            if(grid[i][j] == 1){
                if(i == 0) res = res+1;
                else if(grid[i-1][j] == 0) res++;
                if(i == N-1) res++;
                else if(grid[i+1][j] == 0) res++;
                if(j == 0) res++;
                else if(grid[i][j-1] == 0) res++;
                if(j == M-1) res++;
                else if(grid[i][j+1] == 0) res++;
            }
        }
    }
    
    cout<<res;
    return 0;
}

C++题解2(来源代码随想录):计算岛屿单元个数,有4个边,每两两相邻的消掉2个边。

那么只需要在计算出相邻岛屿的数量就可以了,相邻岛屿数量为cover。

结果 result = 岛屿数量 * 4 - cover * 2。

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> grid(n, vector<int>(m, 0));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> grid[i][j];
        }
    }
    int sum = 0;    // 陆地数量
    int cover = 0;  // 相邻数量
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (grid[i][j] == 1) {
                sum++; // 统计总的陆地数量
                // 统计上边相邻陆地
                if(i - 1 >= 0 && grid[i - 1][j] == 1) cover++;
                // 统计左边相邻陆地
                if(j - 1 >= 0 && grid[i][j - 1] == 1) cover++;
                // 为什么没统计下边和右边? 因为避免重复计算
            }
        }
    }

    cout << sum * 4 - cover * 2 << endl;

}
相关推荐
零号全栈寒江独钓8 分钟前
visual studio编译wxWidgets
c++·visual studio
单车少年ing9 分钟前
一个编码BUG
算法·bug
努力中的编程者9 分钟前
哈希表(C语言底层实现)
c语言·数据结构·c++·算法·哈希算法·散列表
mjhcsp12 分钟前
C++ 迭代加深搜索(IDDFS):从原理到实战的深度解析
c++·深度优先·迭代加深
CoovallyAIHub22 分钟前
ICLR 2026 | MRAD:不拟合直接查表,零样本工业缺陷检测新范式,16 数据集均值最优
深度学习·算法·计算机视觉
摆烂小白敲代码22 分钟前
【数据结构与算法】汉诺塔问题(C++)
c语言·开发语言·数据结构·c++·算法·hanoi·汉诺塔问题
Trouvaille ~27 分钟前
【递归、搜索与回溯】专题(八):记忆化搜索——从暴力递归到动态规划的桥梁
c++·算法·leetcode·青少年编程·面试·蓝桥杯·动态规划
刚入坑的新人编程1 小时前
C++qt(3)-按钮类控件
开发语言·c++·qt
乐观勇敢坚强的老彭1 小时前
本周C++编程课笔记:for循环练习
java·c++·笔记
飞Link1 小时前
降维打击聚类难题:高斯混合模型 (GMM) 深度解析与实战
人工智能·算法·机器学习·数据挖掘·聚类