题解 | 岛屿数量

岛屿数量

https://www.nowcoder.com/practice/5225a111760b46c2be897d97b4d8561f

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const ll N=105; // 数组大小(因为n,m≤100,开105留边界)


// 全局变量:存储地图、访问标记、八方向偏移
char g[N][N];   // g[i][j]:存储地图的字符(W/.),用'0'填充边界防止越界
bool b[N][N];   // b[i][j]:标记该格子是否被访问过(避免重复处理同一岛屿)
// 八方向偏移数组(对应:右下、右、右上、下、上、左下、左、左上)
ll dx[]={1,1,1,0,0,-1,-1,-1}; 
ll dy[]={1,0,-1,1,-1,1,0,-1};


// 算法核心:DFS(深度优先搜索)—— 标记当前W所在的整个连通岛屿
// 思想:从当前W格子出发,递归遍历所有八连通的W格子,标记为已访问
void dfs(ll i, ll j){
    b[i][j] = true; // 第一步:标记当前格子为已访问(避免重复处理)
    
    // (冗余判断:因为main中只有g[i][j]是W才会调用DFS,这里可省略)
    if(g[i][j] == '.') return; 
    
    // 遍历当前格子的8个相邻方向
    for(ll k=0; k<8; k++){
        // 计算相邻格子的坐标
        ll x = i + dx[k];
        ll y = j + dy[k];
        // 合法条件:①未被访问过 ②不是边界(g[x][y]!='0',因为边界初始化为'0')
        if(b[x][y] == false && g[x][y] != '0'){
            dfs(x, y); // 递归处理相邻的W格子(标记整个连通块)
        }
    }
}


int main() {
    // 步骤1:输入地图尺寸n(行)、m(列)
    ll n, m;
    cin >> n >> m;
    
    // 步骤2:初始化地图边界为'0'(避免DFS时越界访问)
    memset(g, '0', sizeof g); 
    
    // 步骤3:输入地图数据(从第1行第1列开始存储,留边界)
    for(ll i=1; i<=n; i++){
        for(ll j=1; j<=m; j++){
            cin >> g[i][j];
        }
    }
    
    // 步骤4:遍历所有格子,统计W岛屿数量
    ll res = 0; // res:记录W岛屿的总数
    for(ll i=1; i<=n; i++){
        for(ll j=1; j<=m; j++){
            // 触发条件:当前格子是W + 未被访问过(说明是新岛屿的起点)
            if(b[i][j] == false && g[i][j] == 'W'){
                res++; // 新岛屿,计数+1
                dfs(i, j); // 调用DFS标记这个岛屿的所有连通格子
            }
        }
    }
    
    // 步骤5:输出最终的W岛屿数量
    cout << res;
    return 0;
}

全部评论

相关推荐

哈哈哈,你是老六:倒挂很正常,我22年毕业,现在干了3年也就大厂白菜价呢,我比校招经验还强呢,我还能带校招的呢
点赞 评论 收藏
分享
01-09 11:18
门头沟学院 Java
作者先叠个甲:本人双非本,秋招拿到了多个大厂offer,这个过程也不容易,但是在看到很多秋招胜利之后说自己一路有多艰辛的文章,总感觉有一点不对劲,想了很久打算写一篇文章分析一下,本文仅代表作者观点,不认同的可以在评论区大家一起理性讨论。&nbsp;秋招已经结束,各类社交平台出现一大批“大厂上岸”胜利结算。文章的叙事逻辑高度相同,开篇就渲染焦虑和困惑,学习时的挑灯夜读、投递时的屡屡碰壁、面试时的如履薄冰,将过往经历包装成一步艰辛的“奋斗史”,然后最终以大厂offer的胜利结尾,字里行间全是苦尽甘来的优越感。但是在我看来,这类文章的本质是结果导向的、带有浮夸的叙事,因为其内核不是分享经验,而是借“苦难”之名...
创作小队长:你的批判视角非常犀利,尤其“结果决定叙事权”的洞察非常精准,哈哈想邀请你来成为我们的创作者🫰 但我想补充一个视角:许多分享者的初衷并非炫耀结果或者苦难,我更愿意相信他们在这个过程中付出了很多,在这场战役结束后,他们迫不及待地想被看到,记录和分享都是给自己的一个交代,而非真的教会别人什么,他们的初衷未必是想制造焦虑。求职市场的残酷、经济环境的下行、世俗价值观才是这种叙事流行的土壤,作为一个普通人无法抵抗洪流。 感谢你发起这场讨论。理想的社区,既需要这样锐利的批判来保持清醒,你的洞察非常犀利,也许会启发一些人,能逐渐改变这种叙事~
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务