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

相关推荐
会员源码网1 小时前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
有意义2 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub3 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户726876103373 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect3 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
不想写代码的星星4 小时前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++
xlp666hub20 小时前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
ZhengEnCi1 天前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记1 天前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
任沫1 天前
字符串
数据结构·后端