leetcode547. 省份数量

news2024/11/6 3:10:47

有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。

省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

返回矩阵中 省份 的数量。

示例 1:
在这里插入图片描述
输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出:2

思路:

1、我们这道题因为是要找到城市的周边,而在矩阵中第i行和第i列都表示这个城市,因此矩阵是对称的,我们只需要遍历行或者列就行。
2、假如我们先从第0行开始遍历,为了防止重复遍历,我们需要一个visited[]来判断是否已经遍历过了。同时我们还需要一个值用来记录province的数量。
3、首先找到第一个未被遍历的城市,然后进入dfs。
4、dfs中的 j 如果未被遍历同时isConnected值为1,说明和第 i 个城市连通。标记为visited
5、那与第 j 个城市连通,自然也与第 i 个城市也连通,所以继续向下遍历。
而所有递归完成后与第 i 个城市连通的所有城市都为visited,再查找到的就是新的省份了。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void dfs(vector<vector<int>>& graph, int i, vector<bool>& visited) {
	
	for (int j = 0; j < graph[0] .size(); j++)
	{
		if (graph[i][j] == 1 /*&& i != j */&& visited[j] == false)//找到顶点i的一个未访问相邻点j
		{
			visited[j] = true;
			dfs(graph, j, visited);
		}
	}
}

int findCircleNum(vector<vector<int>>& isConnected) {
	int size = isConnected.size();
	vector<bool> visited(size,false);//因为邻接矩阵表示无向图时候的对称性,用一维数组表示
	int res = 0;
	for (int i = 0; i < size; i++)
	{
		if (visited[i] == false)
		{
			visited[i] = true;
			res++;
			dfs(isConnected, i, visited);
		}
	}
	return res;
}

int main() {
	vector<vector<int>> graph{ {1,1,0},{1,1,0},{0,0,1} };
	int res = findCircleNum(graph);
	cout << res << endl;
	return 0;
}

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

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

相关文章

讨论度超20亿,肯德基疯狂星期四是如何出圈的?

每到周四&#xff0c;网上就会出现一股“神秘力量”——今天是星期四&#xff0c;V我50&#xff0c;请我吃肯德基。 肯德基疯狂星期四能有多火&#xff1f; 目前&#xff0c;#肯德基疯狂星期四#话题阅读量超23亿次&#xff0c;参与讨论次数超600万&#xff0c;而带话题原创人数…

不得不说的结构型模式-桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它可以将抽象部分与实现部分分离&#xff0c;使得它们可以独立地变化。桥接模式的核心思想是将一个系统分成两个独立的部分&#xff0c;抽象部分和实现部分&#xff0c;并且让它们可以互相独立…

sublime text的snippet介绍,提高编程效率

自定义Snippet Sublime Text 的 Snippet 是一种快捷方式&#xff0c;它允许您使用自定义模板或代码片段更快地编写代码。以下是创建 Snippet 的步骤&#xff1a; 打开 Sublime Text 编辑器并创建一个新文件。菜单栏选择 “Tools” -> “Developer” -> “New Snippet”…

python里面单双下划线的区别

区别&#xff1a; xx:公有变量&#xff0c;所有对象都可以访问&#xff1b; xxx:双下划线代表着是系统定义的名字。 __xxx&#xff1a;双前置下划线&#xff0c;避免与子类中的属性命名冲突&#xff0c;无法在外部直接访问。代表着类中的私有变量名。 _xxx&#xff1a;单前置…

【Maven 入门】第一章、Maven概述

一、什么是Maven&#xff1f; Maven是一款基于Java平台的强大构建工具&#xff0c;可用于管理和构建项目。它提供了一种易于使用的建立项目的方法&#xff0c;使开发者可以更快速、更高效地构建软件。 Maven的功能包括依赖管理、构建、发布、文档生成、测试在内的整个项目生命…

nodejs项目的轻量级数据持久化方案,node-json-db,直接使用json文件保存,查询数据。

前言 作为一名前端开发&#xff0c;我们做网站时&#xff0c;难免会遇到需要保存数据的场景&#xff0c;比如做一个小官网&#xff0c;没有注册&#xff0c;没有登陆&#xff0c;只有一个给我们提建议&#xff0c;如下面的&#xff0c; 网站上只有一处需要填写数据。 场景 …

RK3399平台开发系列讲解(PCI/PCI-E)PCIE相关配置说明

🚀返回专栏总目录 文章目录 一、DTS 配置二、menuconfig 配置三、cmdline 配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在使用 RK3399 平台 PCIE 时候的配置。 一、DTS 配置 ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; 此项是设置 PCIe…

3自由度并联绘图机器人实现写字功能

1. 功能说明 本文示例将实现R305样机3自由度并联绘图机器人写字的功能。 2. 电子硬件 在这个示例中&#xff0c;采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板Bigfish2.1扩展板电池7.4V锂电池 3. 功能…

Jenkins集成SonarQube实现代码质量检查

文章目录 一、前提配置1.1 安装及配置SonarQube Scanner插件1.2 配置SonarQube servers 二、非流水线集成SonarQube1.1 配置非流水线任务 三、流水线集成SonarQube 一、前提配置 1.1 安装及配置SonarQube Scanner插件 (1) 点击【系统管理】>【插件管理】>【可选插件】搜…

Netty核心模块、核心组件理解

文章目录 一、入门案例二、Bootstrap、ServerBootstrap三、Future 、ChannelFuture四、Channel五、Selector六、ChannelHandler 及其实现类七、Pipeline 和 ChannelPipeline八、ChannelHandlerContext九、ChannelOption十、EventLoopGroup 和其实现类十一、Unpooled类与ByteBuf…

Vue3技术5之watchEffect函数、Vue3生命周期、自定义hook函数

Vue3技术5 watchEffect函数Demo.vue总结 Vue3生命周期Vue3生命周期测试App.vueDemo.vue 组合式API使用生命周期钩子Demo.vue 总结&#xff1a; 自定义hook函数获取鼠标的x,yDemo.vue 使用hook方式文件目录hooks/usePoint.jsApp.vueDemo.vueTest.vue watchEffect函数 Demo.vue …

MicroPython ESP8266 GPIO引脚使用详解

MicroPython ESP8266 GPIO引脚使用 &#x1f4cc;相关篇《【MicroPython esp8266】固件烧写教程》 ✨本案例基于Thonny平台开发。✨ &#x1f4dc;固件版本信息&#xff1a;MicroPython v1.19.1 on 2022-06-18; ESP module with ESP8266 &#x1f516;ESP8266可用管脚有&…

计算机组成原理——第六章总线(上)

误逐世间乐&#xff0c;颇穷理乱情 文章目录 前言6.1.1 总线概述6.1.2 总线的性能指标6.2 总线仲裁(408不考) 前言 本章在概述部分我们会首先介绍一下总线的基本概念&#xff0c;介绍一下总线的分类以及经典结构&#xff0c;介绍一些性能指标来评价总线的性能如何&#xff0c;…

电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…

通过单线程/线程池/分治算法三种方式实现1亿个数字的累加

一、任务类型 我们在做项目的时候&#xff0c;都需要考虑当前的项目或者某一个功能主要的核心是什么&#xff1f;是CPU密集计算型&#xff0c;还是IO密集型任务。我们调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源&#xff0c;从而最大限度地…

AIGC潮水中,重新理解低代码

如果将一句话生成应用形容成L4级的“无人驾驶”&#xff0c;伙伴云的「AI搭建」则更像L2级的“辅助驾驶”。 作者|斗斗 出品|产业家 2023年&#xff0c;AIGC下的低代码赛道“暗流涌动”。 “对于「AI搭建」的搭建效果&#xff0c;尤其是在场景覆盖的广度上&#xff0c;连…

正式开赛|2023年“桂林银行杯”数据建模大赛暨全国大学生数学建模竞赛广西赛区热身赛

为学习贯彻党的二十大工作报告中关于加快发展数字经济、促进数字经济和实体经济深度融合的重要指示&#xff0c;不断推进数字化转型与金融科技创新&#xff0c;桂林银行联合全国大学生数学建模竞赛广西赛区组委会、广西应用数学中心&#xff08;广西大学&#xff09;共同主办20…

如何选择CDN厂商

如果您的在线业务面临着流量和访客数量的增加&#xff0c;如果您想提高网站速度和用户体验&#xff0c;选择合适的CDN提供商是朝着正确方向迈出的一步&#xff0c;那么如何来选择最合适的CDN厂商呢&#xff0c;火伞云小编今天为您解答&#xff1a; 一、测试潜在的CDN提供商 对…

centos7.6非默认端口的ssh免密登录(centos7.6指定端口的ssh免密登录)

非默认端口号&#xff08;以6622端口号示例&#xff09;的免密登录 1.1. 修改/etc/ssh/sshd_config Port 6622 1.2. 重启sshd服务 service sshd restart 1.3. 创建用户ds(可选&#xff0c;这里以ds用户做免密为示例) adduser ds&#xff1b; 1.4. 查看ds用户(可选) id ds; …

HBase高手之路6—HBase高可用

文章目录 HBase的高可用一、HBase高可用简介二、搭建HBase的高可用1.在HBase的conf文件夹中创建一个backup-masters的文件2.修改backup-masters&#xff0c;添加作为备份master的节点信息3.分发backup-masters文件到其他的服务器4.重新启动HBase5.查看web ui 三、测试高可用1.尝…