【错题集-编程题】城市群数量

简介: 【错题集-编程题】城市群数量

牛客对应题目链接:城市群数量_牛客题霸_牛客网 (nowcoder.com)


一、分析题目

1、并查集


2、dfs(经典 floodfill 算法

使用深度优先搜索(DFS)算法来遍历所有城市,然后统计城市群的数量。


3、bfs经典 floodfill 算法

使用广度优先搜索(BFS)算法来遍历所有城市,然后统计城市群的数量。从一个起始城市开始,将其加入队列,然后依次访问队列中的城市,并将其相连的未访问过的城市加入队列,直到队列为空。


二、代码

1、并查集

class Solution {
public:
    int find(int x, vector<int>& p)
    {
        if(p[x]!=x) p[x]=find(p[x], p);
        return p[x];
    }
    int citys(vector<vector<int> >& m) {
        int n=m.size();
        vector<int> p(n);
        for(int i=0; i<n; i++)
            p[i]=i;
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                if(i!=j && m[i][j]==1)
                    p[find(i, p)]=find(j, p);
        int res=0;
        for(int i=0; i<n; i++)
            if(i==p[i]) res++;
        return res;
    }
};

2、dfs

class Solution {
private:
    bool vis[201]={false};
public:
    void dfs(vector<vector<int> >& m, int i)
    {
        vis[i]=true;
        for(int j=0; j<m[i].size(); j++)
        {
            if(!vis[j] && m[i][j]==1)
                dfs(m, j);
        }
    }
    int citys(vector<vector<int> >& m) {
        int n=m.size();
        int res=0;
        for(int i=0; i<n; i++)
        {
            if(!vis[i])
            {
                res++;
                dfs(m, i);
            }
        }
        return res;
    }
};

3、bfs

class Solution {
private:
    int n;
    queue<int> q;
    bool vis[201]={false};
public:
    void bfs(vector<vector<int>>& m, int st)
    {
        q.push(st);
        vis[st]=true;
        while(q.size())
        {
            int t=q.front();
            q.pop();
            for(int i=0; i<n; i++)
            {
                if(!vis[i] && t!=i && m[t][i]==1)
                {
                    q.push(i);
                    vis[i]=true;
                }
            }
        }
    }
    int citys(vector<vector<int> >& m) {
        n=m.size();
        int res=0;
        for(int i=0; i<n; i++)
        {
            if(!vis[i])
            {
                res++;
                bfs(m, i);
            }
        }
        return res;
    }
};

三、反思与改进

记录一下这道题的多种做法。


相关文章
|
10月前
|
存储 人工智能 算法
三维数组解决问题案例(天梯赛座位分配)
三维数组解决问题案例(天梯赛座位分配)
120 0
|
4天前
|
安全
全员王牌A|6月特别活动,挖洞快乐加倍
全员王牌A|6月特别活动,挖洞快乐加倍
|
2月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
65 13
|
8月前
|
测试技术
ACL 2024:大模型性能掺水严重?北大交出答卷:交互评估+动态出题,死记硬背也没用
【7月更文挑战第8天】北大研究团队推出KIEval框架,针对大语言模型(LLMs)的性能评估进行创新。KIEval采用互动评估和动态出题,通过多轮基于知识的对话测试模型理解和应用能力,旨在减少数据污染影响,挑战死记硬背的评估。然而,该方法可能增加计算需求,且评估结果可能受主观因素影响,不适用于所有类型LLMs。[论文链接:](https://arxiv.org/abs/2402.15043)**
142 24
|
9月前
1036 跟奥巴马一起编程 (15 分)
1036 跟奥巴马一起编程 (15 分)
|
存储 Linux
还在担心期末挂科吗? 期末必备复习资料-----“树“的概念
还在担心期末挂科吗? 期末必备复习资料-----“树“的概念
147 0
|
数据库
第一遍阅读之《信息系统开发与管理》(二战)
第二次学习信息系统开发与管理,第一感觉是:必过! 信息系统开发与管理距离我们软件的具体开发很近,在我们生物专业学习过程中,有一门课程叫做《食品仪器分析》,其中有一章节的内容讲的大概是建立一个工厂的过程是怎么样的。这其中的方法和我们的《信息系统开发与管理》的内容有异曲同工之妙,我们要建立的是一个工厂,但是摆脱不了和周围事物的联系。
|
JavaScript
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
404 0
|
算法 C++
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
130 0
|
测试技术 C++
试题历届真题特别数的和【第十届】【省赛】【B组】(C++)
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1 到 n 中,所有这样的数的和是多少?
247 0