LeetCode547.Number-Of-Provinces<省份问题>

news2024/11/18 10:34:58

题目:

 

思路:

连通的部分加起来,然后总的 减去连通的部分。

但是很可惜 只能通过部分

 似乎将st[i][j] st[j][i] 改变之后是可行的 但是实际上 1 2 连通后 2 1 确实是不会再加。 但是  2 3却还是在加一遍。

好吧。答案的思路是使用并查集。将连通的部分变为一个集合。然后数里面有几个集合。

 

代码是:

//code
 
class Solution {
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        int n = isConnected.size();
        vector<int> parent(n);
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (isConnected[i][j] == 1) {
                    Union(parent, i, j);
                }
            }
        }
        int res = 0;
        for (int i = 0; i < n; i++) {
            if (parent[i] == i) {
                res++;
            }
        }
        return res;
    }

private:
    int Find(vector<int>& parent, int i) {
        if (parent[i] == i) {
            return i;
        }
        parent[i] = Find(parent, parent[i]);
        return parent[i];
    }

    void Union(vector<int>& parent, int i, int j) {
        int pi = Find(parent, i);
        int pj = Find(parent, j);
        parent[pi] = pj;
    }
};

假设输入为:

[[1,1,0,0,0],
 [1,1,0,0,0],
 [0,0,1,1,0],
 [0,0,1,1,0],
 [0,0,0,0,1]]

运行过程如下:

  1.  初始化parent数组为[0, 1, 2, 3, 4],每个城市的父节点都是它自己。
  2. 2遍历矩阵中的每一条边,当i=0,j=1时,发现城市0和城市1相连,将它们所在的集合合并,即将城市0的父节点设置为1,此时parent数组变为[1, 1, 2, 3, 4];当i=1,j=0时,由于城市0已经和城市1相连,所以不需要再次合并它们所在的集合。
  3.  继续遍历矩阵中的每一条边,当i=2,j=3时,发现城市2和城市3相连,将它们所在的集合合并,即将城市2的父节点设置为3,此时parent数组变为[1, 1, 3, 3, 4];当i=3,j=2时,由于城市2已经和城市3相连,所以不需要再次合并它们所在的集合。
  4. 继续遍历矩阵中的每一条边,当i=4,j=4时,发现城市4和城市4相连,因此不需要进行任何操作。
  5. 最后,统计有多少个城市的父节点是它自己,发现有3个,因此省份的数量为3,返回结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lc209.长度最小的子数组

暴力破解&#xff1a;二次for循环遍历num[i]...num[j]&#xff0c;记录满足条件的最小长度 前缀和二分&#xff1a;前缀和降低计算num[i]...num[j]的时间复杂度 对前缀和数组中的每个数进行遍历&#xff0c;找到距离这个数满足条件的最小长度 前缀和数组单调递增&#xff0c;此…

蓝海卓越计费管理系统任意文件读取下载

……人哪&#xff0c;活着是这么的苦&#xff01;一旦你从幸福的彼岸被抛到苦难的此岸&#xff0c;你真是处处走头无路&#xff1b;而现在你才知道&#xff0c;在天堂与地狱之间原来也只有一步之遥&#xff01; 漏洞描述 蓝海卓越计费管理系统存在任意文件读取漏洞&#xff0…

pycharm写scrapy遇到的问题

目录 背景创建scrapy难受的开始指定类型修改模板并指定使用运行scrapy 背景 居然还有万能的pycharm解决不了的python程序&#xff1f;&#xff1f;&#xff1f; 创建scrapy 由于PyCharm中没有直接创建Scrapy项目的选项,所以使用命令行创建一个项目 安装scrapy pip install…

11、springboot项目启动时对容器中的bean进行延迟初始化

springboot项目启动时对容器中的bean进行延迟初始化 预初始化&#xff1a; Spring Boot在启动应用时&#xff0c;会启动Spring容器&#xff0c;当启动Spring容器时&#xff0c;Spring会自动初始化容器中所有的singleton Bean——这是默认行为 预初始化的好处&#xff1a; 1、项…

Qt 4. 发布exe

把ex2.exe放在H盘Ex2文件夹下&#xff0c;执行 H:\Ex2>windeployqt ex2.exe H:\Ex2>windeployqt ex2.exe H:\Ex2\ex2.exe 64 bit, release executable Adding Qt5Svg for qsvgicon.dll Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5…

C++多线程的简单使用

一.引言 在C学习中&#xff0c;我们在初步学习的过程中写的程序都只可以在本地并且只可以被本主机访问。在此&#xff0c;我们会想要让别人也体验一下我们邪恶的程序的话&#xff0c;我们该怎么办呢&#xff1f; 首先我们介绍的时多线程编程&#xff0c;就相当于我们的登录qq&…

flask数据库操作

本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高…

强化学习(PPO,DQN,A3C)

目录 1.强化学习和深度学习的区别 2. 强化学习思路 3.baseline 4.PPO 4.1on-policy和off-policy简单理解 4.2actotcritic 5.DQN&#xff08;回归问题&#xff09; 4.1公式 4.2Q表 参考文献 1.强化学习和深度学习的区别 强化学习和深度学习的区别&#xff1a;在深度学习中&a…

【*1900 图论+枚举思想】CF1328 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 注意到题目的性质&#xff1a;满足条件的路径个数是极少的&#xff0c;因为每个点离路径的距离<1 先考虑一条链&#xff0c;那么直接就选最深那个点作为端点即可 为什么&#xff0c;因为我们需要遍历所有点…

助你丝滑过度到 Vue3 其组合式API的应用 ②⑦

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

C++成神之路 | 第一课【步入C++的世界】

目录 一、认识C++ 1.1、关于 C++ 1.2、C++的前世今生 1.2.1、C+

【Tomcat---1】IDEA控制台tomcat日志输出乱码解决

一、修改IDEA的文件编码配置为UTF-8 二、修改IDEA的vmoptions文件&#xff0c;添加-Dfile.encodingUTF-8 到Tomcat目录/conf文件夹修改logging.properties 重启idea即可。采用统一的编码

ansible的脚本——playbook剧本

目录 一、playbook的组成 二、 playbook安装httpd服务 1.编写playbook剧本 2.运行playbook 三、定义、引用变量 四、 指定远程主机sudo切换用户 五、when条件判断 六、迭代 七、Templates 模块 1.先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设置引用的变…

微信小程序生成带参数的二维码base64转png显示

getQRCode() {var that this;wx.request({url: http://localhost:8080/getQRCode?ID 13,header: {content-type: application/json},method: POST,responseType: arraybuffer,//将原本按文本解析修改为arraybuffersuccess(res) {that.setData({getQRCode: wx.arrayBufferToB…

Java集合篇

前言&#xff1a;笔者参考了JavaGuide、三分恶等博主的八股文&#xff0c;结合Chat老师和自己的理解&#xff0c;整理了一篇关于Java集合的八股文。希望对各位读者有所帮助~~ 引言 常见集合有哪些&#xff1f; Java集合相关类和接口都在java.util包中&#xff0c;按照其存储…

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks &#xff08;Java 虚拟机栈&#xff09; 每个线程运行时所需要的内存&#xff0c;称为虚拟机栈每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xff0c;对应着每次方法调用时所占用的内存每个线程只能有一个活动…

Spring的创建及使用

文章目录 什么是SpringSpring项目的创建存储Bean对象读取Bean对象getBean()方法 更简单的读取和存储对象的方式路径配置使用类注解存储Bean对象关于五大类注解使用方法注解Bean存储对象Bean重命名 Bean对象的读取 使用Resource注入对象Resource VS Autowired同一类型多个bean对…

QT服务器练习

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this); }Widget::~Widget() {delete ui; }//启动服务器按钮对…

第1篇:了解Matter物模型翻译器

第1篇&#xff1a;了解Matter物模型翻译器 1. Matter物模型简介2. 物模型翻译成编程语言3. 思考题 1. Matter物模型简介 Matter物模型的介绍可以参考: Matter Core Specification的第7章 Matter物模型直观展示&#xff0c;可以看下图1-1&#xff0c; Matter Dimmable Light的…