323. Number of Connected Components in an Undirected Graph

2024-02-27 00:08

本文主要是介绍323. Number of Connected Components in an Undirected Graph,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  寻找多少个独立的图,那不就是遍历完一个图,然后遍历其他图吗? 直到所有的点都遍历完。
  创建两个unordered_set, 一个记录访问过的,一个记录没有访问过的点。
  遍历每个图的节点的时候,动态的更新这两个set。

当第一个独立的图遍历完后 ret++;

如果记录没有访问过的点不为空,那么就继续循环去遍历。

这个办法可以,但是效率低。

class Solution {
public:
    unordered_map<int, vector<int>>  buildGraph(vector<vector<int>> edges) {
        unordered_map<int, vector<int>> graph;
        
        for(auto & edge: edges) {
            graph[edge[0]].push_back(edge[1]);
            graph[edge[1]].push_back(edge[0]);
        }
        return graph;
    }
    
    
    int countComponents(int n, vector<vector<int>>& edges) {
        //寻找多少个独立的图,那不就是遍历完一个图,然后遍历其他图吗? 直到所有的点都遍历完。
        //创建两个unordered_set, 一个记录访问过的,一个记录没有访问过的点。
        //遍历每个图的节点的时候,动态的更新这两个set。
        
        if(edges.size() == 0 && n == 1)
            return 1;
        else if(edges.size() == 0 && n == 0)
            return 0;
        
        int ret;
        
        queue<int> myqueue;
        unordered_set<int> accessedVertex, unAccessedVertex;
        
        for(int i=0;i<n;i++)
            unAccessedVertex.insert(i);
        
        unordered_map<int, vector<int>> neighbors = buildGraph(edges);
        
        while(unAccessedVertex.size()!=0) {
            int tmp = *unAccessedVertex.begin();
            myqueue.push(tmp);
            accessedVertex.insert(tmp);
            unAccessedVertex.erase(tmp);

            while(!myqueue.empty()) {
                int v = myqueue.front();
                myqueue.pop();

                for(auto &neighbor: neighbors[v]) {
                    if(accessedVertex.find(neighbor) != accessedVertex.end())
                        continue;
                    else
                    {       myqueue.push(neighbor);
                            accessedVertex.insert(neighbor);
                            unAccessedVertex.erase(neighbor);
                    }
                }
            }
            ret++;
        }
        
        return ret;
    }
};

应该还有更好的办法,先看看9章视频看看。

这篇关于323. Number of Connected Components in an Undirected Graph的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750595

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

【Hdu】Minimum Inversion Number(逆序,线段树)

利用线段树在nlogn的时间复杂度内求一段数的逆序。 由于给的序列是由0 ~ n -1组成的,求出初始的逆序之后可以递推出移动之后的逆序数。 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const in

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S

Neighborhood Homophily-based Graph Convolutional Network

#paper/ccfB 推荐指数: #paper/⭐ #pp/图结构学习 流程 重定义同配性指标: N H i k = ∣ N ( i , k , c m a x ) ∣ ∣ N ( i , k ) ∣ with c m a x = arg ⁡ max ⁡ c ∈ [ 1 , C ] ∣ N ( i , k , c ) ∣ NH_i^k=\frac{|\mathcal{N}(i,k,c_{

ORA-24067: exceeded maximum number of subscribers for queue ADMIN.SMS_MT_QUEUE

临时处理办法: delete from aq$_ss_MT_tab_D;delete from aq$_ss_MT_tab_g;delete from aq$_ss_MT_tab_h;delete from aq$_ss_MT_tab_i;delete from aq$_ss_MT_tab_p;delete from aq$_ss_MT_tab_s;delete from aq$