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

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

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

三、反思与改进

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


相关文章
|
数据可视化 定位技术 数据处理
基于ArcGIS的晕线制作
【2月更文挑战第2天】
837 4
|
安全 开发工具
VBA窗体最大化最小化按钮实现
VBA窗体最大化最小化按钮实现
1039 0
|
算法 编译器
内存学习(七):伙伴分配器(正式版)1
内存学习(七):伙伴分配器(正式版)1
624 0
|
负载均衡 应用服务中间件 Linux
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
688 0
|
8月前
|
人工智能 自然语言处理 安全
大型企业如何建设BI系统?2026年最新技术趋势与实施指南
截至2026年,BI系统已跃升为智能决策中枢。瓴羊Quick BI凭借AI原生架构、实时分析、精细化权限、移动嵌入与弹性部署五大能力,以“智能小Q”驱动自然语言交互、主动洞察与行动闭环,助力大型企业破除数据孤岛、实现湖仓一体下的自助分析与战略升级。(239字)
|
4月前
|
存储 人工智能 自然语言处理
大模型应用:智能体知识库动态迭代架构与大模型数据集全链路版本管理实战.135
本文详解大模型时代智能体知识库动态迭代与数据集版本管理双引擎体系:前者实现知识实时增量更新、自动清洗与冷热分层,保障RAG时效性;后者依托DVC+Git、数据指纹与分支快照,确保训练数据可追溯、可回滚、合规稳定。二者协同构建“知识更新→样本沉淀→模型优化”闭环,兼顾实时性、准确性与工程可靠性。
535 4
|
7月前
|
人工智能 自然语言处理 监控
OpenClaw(养龙虾)全攻略:是什么?能做什么?怎么部署?
全网爆火的“养龙虾”实为部署开源AI智能体OpenClaw!它不止能对话,更能动手:自动办公、写代码、抢电商、控家居、创内容。图标是红机械龙虾,故得名。阿里云一键部署,2步搞定,支持微信/飞书等自然语言操控。让AI真正替你干活!
2254 9
|
4月前
|
机器学习/深度学习 人工智能 调度
大模型落地核心拆解:训练、算力硬件与真实落地瓶颈全解析
本文深度剖析大模型落地核心难点:厘清训练与推理的本质区别,揭秘算力真相(显存/带宽/通信比FLOPS更关键),对比CPU/GPU/TPU/NPU选型逻辑,并直击“爆显存”“多卡拖慢”等真实瓶颈。助你从调API进阶到底层实战。(239字)
447 0
|
4月前
|
Web App开发 人工智能 自然语言处理
AI英语口语App的开发
这是一款主打“低焦虑、强反馈、高沉浸”的AI英语口语App,依托RTC实时音视频、ASR语音识别、LLM智能对话与TTS拟人合成三大技术底座,实现200ms内流畅交互;通过双轨工作流(主线对话+异步纠错),兼顾表达流畅性与精准提分;覆盖场景通关、考前模拟、自由闲聊及自适应复习四大核心模块。(239字)
|
11月前
|
人工智能 JSON 机器人
10分钟!用飞书卡片+n8n零代码搞定自动化
手把手教你用飞书卡片+n8n搭建零代码自动化应用。

热门文章

最新文章