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

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

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

三、反思与改进

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


相关文章
|
7月前
|
存储 人工智能 算法
三维数组解决问题案例(天梯赛座位分配)
三维数组解决问题案例(天梯赛座位分配)
98 0
|
存储 Linux
还在担心期末挂科吗? 期末必备复习资料-----“树“的概念
还在担心期末挂科吗? 期末必备复习资料-----“树“的概念
137 0
2021米哈游校园招聘-提前批-编程题1-最简分式
2021米哈游校园招聘-提前批-编程题1-最简分式
191 0
|
JavaScript
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
369 0
小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,
|
算法 C++
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
119 0
|
人工智能 数据可视化 大数据
用数据可视化的方式做汇报,更容易显现成绩、升职加薪更近一步
在日常工作中,老板总是会时不时的让我们做工作汇报,而这也是我们能够在老板面前展示自己的机会。但是,如果你拿给老板的是这样一张数据密密麻麻的表格,你觉得老板能够在短时间内看懂你的数据吗?
用数据可视化的方式做汇报,更容易显现成绩、升职加薪更近一步
LeetCode 训练场:1450. 在既定时间做作业的学生人数
LeetCode 训练场:1450. 在既定时间做作业的学生人数
125 0
LeetCode 训练场:1450. 在既定时间做作业的学生人数
|
移动开发 JavaScript 算法
月薪 3500 的程序员最终是如何实现月入百万的?
  今天故事的主人公,是CSDN的博客专家,他在文中讲述了,自己从月薪三千五的开发小白,到入职大厂、买币狂赚狂赔、数次创业浮沉,到最终实现月薪百万的故事。   以下为正文:   2009年7月毕业,校招进入杭州的一家环保上市公司,在滨江杭阿里边上,月薪是3500元,职位是Java工程师,初入职场同事和领导都挺好的,不过每天工作的内容都是重复的Extjs写界面工作,技术得不到提升,工作几个月就开始迷茫了。
260 0
|
大数据
零售数据观(一):如何花30分钟成为一个标签设计“达人”
作者简介:铁叫兽,10年+数据相关经验,曾在电信、阿里从事过DBA,数仓,解决方案,目前从事零售行业的解决方案。 序言:是否碰到大量的人力投入基于流程管理的信息化系统建设,也运行了好几年了,同时大数据也热了好几年了,但企业IT部门还是无从下手,既不确信大数据是否可以真的带来业务价值也不清楚从哪着手更容易推动大数据项目落地,本文就是通过“标签”,一种基于具体业务场景但同时又是业务人员看的懂的数据的方式,帮助企业从点做起,循序渐进,让大数据真正落地。
|
C++
c++基础(上) 听课流水账
1、pass by value /   pass  by  pointer  /   pass  by  reference   pass by value:实参和形参不是同一个值,因此交换的是形参的值,当函数swap结束后,a和b的值并没有发生交换 pass  by pointer  and  pass by reference :实参和形参是相同的。
1275 0
下一篇
DataWorks