算法刷题打卡第27天:省份数量---深度优先搜索

news2025/2/27 21:54:18

省份数量

难度:中等
有 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

示例 2:
在这里插入图片描述

输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]]
输出:3

深度优先搜索

思路:
深度优先搜索的思路是很直观的。遍历所有城市,对于每个城市,如果该城市尚未被访问过,则从该城市开始深度优先搜索,通过矩阵 isConnected 得到与该城市直接相连的城市有哪些,这些城市和该城市属于同一个连通分量,然后对这些城市继续深度优先搜索,直到同一个连通分量的所有城市都被访问到,即可得到一个省份。遍历完全部城市以后,即可得到连通分量的总数,即省份的总数。

时间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n 是城市的数量。需要遍历矩阵 n n n 中的每个元素。
空间复杂度: O ( n ) O(n) O(n),其中 n n n 是城市的数量。需要使用数组 $city_visit $ 记录每个城市是否被访问过,数组长度是 n n n,递归调用栈的深度不会超过 n n n

class Solution:
    def dfs(self, i, city_length, city_visit, isConnected):
        for j in range(city_length):
            if city_visit[j]:
                continue
            if isConnected[i][j]:
                city_visit[j] = True
                self.dfs(j, city_length, city_visit, isConnected)
    def findCircleNum(self, isConnected: List[List[int]]) -> int:
        city_length = len(isConnected)
        city_visit = [False] * city_length
        province = 0
        for i in range(city_length):
            if not city_visit[i]:
                self.dfs(i,city_length, city_visit,isConnected)
                province += 1
        return province

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-provinces

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

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

相关文章

干测试这些年,去过阿里也去过小公司,给年轻测试员们一个忠告....

前言 你眼中的软件测试岗位是怎样的?大部分人可能会给出这样的回答:“测试?简单啊,没什么技术含量,无非就是看需求、看业务手册、看设计文档、然后点点功能是否实现,麻烦点的就是测试下部署安装是否出现兼…

二十三、CANdelaStudio深入-SnapshotData编辑

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的SnapshotData编辑,欢迎各位朋友订阅、评…

C#语言实例源码系列-实现滚动字幕

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

考虑储能电池参与一次调频技术经济模型的容量配置方法matlab程序

考虑储能电池参与一次调频技术经济模型的容量配置方法matlab程序 参考文献:考虑储能电池参与一次调频技术经济模型的容量配置方法 摘要 :规模间歇电源并网引起的电网频率问题,导致对引入储能辅助调频的研究越发迫切。提出一种考虑储能电池参…

网安学习Day14(web漏洞-SQL注入类型及提交注入)

SQL注入类型及提交注入简要明确参数类型简要明确请求方法参数字符型注入测试>sqlilabs less 5 6sqlilabs less 5在这里插入图片描述sqlilabs less 6POST数据提交注入测试>sqlilabs less 11参数JSON数据注入测试>本地环境代码演示COOKIE数据提交注入测试>sqlilabs l…

解决Windows 10 家庭中文版没有组策略编辑器的问题

解决Windows 10 家庭中文版无法打开组策略编辑器的问题 (以下为解决效果) 今天在工作时发现电脑无法打开组策略编辑器,即WinR输入gpedit.msc不能正常调出组策略编辑器; 查看了电脑为Windows 10 家庭中文版,查资料后发…

《恋上数据结构与算法》第1季:双向链表实现(超详细笔记,图文并茂)

数据结构与算法的学习笔记目录:《恋上数据结构与算法》的学习笔记 目录索引双向链表一、双向链表补充【List接口 和 AbstractList抽象类】二、设计双向链表三、双向链表的实现1. 查询节点2. 插入节点3. 删除节点4. 清空节点四、双向链表 vs 动态数组一、双向链表 与…

JUC包(java.util.concurrent)下的常用子类

文章目录前言一、对象锁juc.locks包二、原子类三、四个常用工具类3.1 信号量 Semaphore3.2 CountDownLatch总结前言 博主个人社区:开发与算法学习社区 博主个人主页:Killing Vibe的博客 欢迎大家加入,一起交流学习~~ 一、对象锁juc.locks包 …

单元测试入门篇

一、单元测试是什么? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在测试金字塔模型中处于最底层: 整个金字塔模型代表着越上层的测试集成度越高,执行速度越慢,越下层…

2014-2020年国有大型商业银行和全国股份制商业银行绿色信贷数据

数据集名称:国有大型商业银行和全国股份制商业银行绿色信贷数据 时间范围:2014-2020年 数据来源:商业银行历年业绩报告和社会责任报告 相关说明:绿色金融是指为支持环境改善、应对气候变化和资源节约高效利用的经济活动&#x…

C语言练习之递归实现n的k次方

文章目录前言一、思路二、代码以及运行截图1.代码2.运行截图总结前言 使用C语言递归计算N的k次方 一、思路 求n的k次方的原理就是: n^k nn……*n(k个n进行相乘) 可以得到一个公式: f(k){1k0n∗f(k)k>0f(k) \left\{\begin{…

利用Redis来实现分布式锁

Redis命令 SET 命令有个 NX 参数可以实现「key不存在才插入」,可以用它来实现分布式锁: 如果 key 不存在,则显示插入成功,可以用来表示加锁成功;如果 key 存在,则会显示插入失败,可以用来表示…

PLC中ST编程的自定义功能块

右键单击——添加对线——程序组织单元 弹出对话框 修改名称,选择功能块; VAR_INPUT:输入变量;VAR_OUTPUT:输出变量;VAR:局部变量; 创建一个闪烁功能块,可输入亮和灭的时间&#xff…

基于SSM的高校共享单车管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86468380 主要使用技术 SpringSpringMVCMybatisEasyUIJqueryMysql 功能介绍 系统用户管理: 用户管理:可以添加、修改、删除、检索用户信息(头像、用户账…

PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序

PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 【含风电、光伏、微型燃机、储能蓄电池、燃料电池】 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源危机和环境污染的加重&#xf…

全国工企专利匹配数据(1998-2014)

1、数据来源:国家统计局(工业企业数据)、专利数据来源于国家知识产权局。 2、时间跨度:1998-2014 3、区域范围:全国 4、指标说明: 包含以下指标: 公开(公告)日、申请…

基于SSM的毕业设计管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86469261 主要使用技术 SpringSpringMVCMybatisBootstrapJqueryMysql 功能介绍 本系统的用户可以分为三种:管理员、教师、学生。 管理员:导师管理、学生管理&#x…

【雷达通信】合成孔径雷达地面运动目标检测技术研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

第九章 持续集成CI:基于GitHub的Action回归验证

第九章 持续集成CI:基于GitHub的Action回归验证 持续集成可以认为是一种优秀的开发实践,它可以在代码变更的时候及时反映代码状态。持续集成需要服务器的支持,可以考虑通过 gitlib ci 或者 jenkins 自己搭建持续集成服务器,更好的…

基于SSM的地方文创特产在线商城【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86468623 主要使用技术 SpringSpringMVCMybatisBootstrapMysql 功能介绍 前台: 注册登录:普通用户可进行注册登录; 商品显示:游客可查看今日…