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

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

牛客对应题目链接:城市群数量_牛客题霸_牛客网 (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;
    }
};

三、反思与改进

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


相关文章
|
4月前
|
测试技术
ACL 2024:大模型性能掺水严重?北大交出答卷:交互评估+动态出题,死记硬背也没用
【7月更文挑战第8天】北大研究团队推出KIEval框架,针对大语言模型(LLMs)的性能评估进行创新。KIEval采用互动评估和动态出题,通过多轮基于知识的对话测试模型理解和应用能力,旨在减少数据污染影响,挑战死记硬背的评估。然而,该方法可能增加计算需求,且评估结果可能受主观因素影响,不适用于所有类型LLMs。[论文链接:](https://arxiv.org/abs/2402.15043)**
88 24
L2-028 秀恩爱分得快 (25 分)
L2-028 秀恩爱分得快 (25 分)
155 0
|
JavaScript 安全 定位技术
摄影测量学:期末考试重点总结
本文参考《摄影测量学》 (王佩军,徐亚明 编著);
217 0
高职考技能提升教程012期 阶层求和的综合运用
高职考技能提升教程012期 阶层求和的综合运用
|
算法 C++
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
110 0
|
JavaScript
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
356 0
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
|
存储
L2-028 秀恩爱分得快 (25 分)(模拟)
L2-028 秀恩爱分得快 (25 分)(模拟)
197 0
L2-029 特立独行的幸福 (25 分)(数组模拟)
L2-029 特立独行的幸福 (25 分)(数组模拟)
124 0
|
设计模式 安全 Java
优秀程序员都在注意的十个点
很多事情并不难,只是缺乏多走半里路的习惯!
121 0
优秀程序员都在注意的十个点
LeetCode 训练场:1450. 在既定时间做作业的学生人数
LeetCode 训练场:1450. 在既定时间做作业的学生人数
119 0
LeetCode 训练场:1450. 在既定时间做作业的学生人数