代码随想录 106. 岛屿的周长

106. 岛屿的周长

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n, m;
    cin >> n >> m;
    vector<vector<int>> mp(n, vector<int>(m, 0));
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cin >> mp[i][j];
        }
    }
    int landNum = 0;
    int neighborNum = 0;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            if (mp[i][j] == 1){
                landNum++;
                if (i < n - 1){
                    if (mp[i + 1][j] == 1) neighborNum++;
                }
                if (j < m - 1){
                    if (mp[i][j + 1] == 1) neighborNum++;
                }
            }
        }
    }
    cout << (4 * landNum - 2 * neighborNum);
    return 0;
}

这题没必要用图的遍历算法,直接遍历一遍更加简单,且时间复杂度差不多,不过也还是可以有巧思。笔者更喜欢随想录所提的第二种算法,一个陆地有4条边,如果与别的陆地相邻,那就有两条陆地的边不是岛的边缘,所以遍历中只需要关注陆地的数量,以及陆地的邻接数量就可以轻松的得到答案,也就是4 * landNum - 2 * neighborNum

代码随想录 106. 岛屿的周长

相关推荐
AC赳赳老秦4 分钟前
公开 CSV 数据集批量处理实战:用 OpenClaw 高效完成下载、清洗与标准化分析样本生成
java·开发语言·汇编·c++·python·deepseek·openclaw
凉茶钱35 分钟前
【吃透C++】static、友元、内部类、匿名对象与拷贝编译器优化全解析
c++·青少年编程·visual studio
无名猿1 小时前
左值引用、右值引用与万能引用:引用折叠全解
c++·现代c++·模板元编程·语法基础
多多爱学习1 小时前
括号有几层?得看还有多少个左括号没闭合
c语言·c++·算法·面试
凉茶钱1 小时前
【C++】入门基础语法
开发语言·c++
个 人 练 习 生1 小时前
C++中的内存管理
开发语言·c++·经验分享·学习
续写烂尾1 小时前
MK SD NAND(贴片式TF卡)替代Nor Flash:1Gb容量与256Mb Nor
算法·microsoft
u0111026752 小时前
图片预览越来越占内存聊聊 URL.createObjectURL 的释放时机
图像处理·深度学习·算法·ai作画
Zane19942 小时前
同样是遍历图,为什么BFS能保证找到最短路径,DFS却不行
算法
无限码力2 小时前
2026华为OD机试真题 新系统 9月27日【坚果巧克力】
算法·华为od·华为od机考·华为od机试真题·华为od机试·华为od机考真题题解·华为社招笔试真题