代码随想录 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. 岛屿的周长

相关推荐
数据门徒16 小时前
《人工智能现代方法(第4版)》 第9章 一阶逻辑中的推断 学习笔记
人工智能·笔记·学习·算法
喜欢吃燃面16 小时前
算法竞赛之排序算法
c++·学习·算法
秋深枫叶红16 小时前
嵌入式第三十篇——数据结构——哈希表
数据结构·学习·算法·哈希算法
大大da怪i16 小时前
GPU编程之warp级编程
c++·gpu算力
我发在否16 小时前
C++ > 牛客OJ在线编程常见输入输出练习场
c++·acm·牛客
Keep__Fighting16 小时前
【机器学习:决策树】
人工智能·算法·决策树·机器学习·scikit-learn
2401_8919573116 小时前
简单了解一下智能指针(C++)
开发语言·c++
xiaoye-duck16 小时前
C++入门基础指南:输入输出、缺省参数与函数重载
c++
✎ ﹏梦醒͜ღ҉繁华落℘16 小时前
编程基础--数据结构
数据结构·算法
小毅&Nora16 小时前
【后端】【C++】泛型算法:从传统到C++20 Ranges的进化之旅
算法·c++20·泛函算法