算法刷题打卡第28天:省份数量---广度优先搜索
创始人
2024-02-19 11:45:19
0

省份数量

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

广度优先搜索

思路:
对于每个城市,如果该城市尚未被访问过,则从该城市开始广度优先搜索,直到同一个连通分量中的所有城市都被访问到,即可得到一个省份。

时间复杂度: O(n2)O(n^2)O(n2),其中 nnn 是城市的数量。需要遍历矩阵 isConnectedisConnectedisConnected 中的每个元素。
空间复杂度: O(n)O(n)O(n),其中 nnn 是城市的数量。需要使用数组 city_visitcity\_visitcity_visit 记录每个城市是否被访问过,数组长度是 nnn,广度优先搜索使用的队列的元素个数不会超过 nnn。

import collections
class Solution:def findCircleNum(self, isConnected: List[List[int]]) -> int:city_length = len(isConnected)city_visit = [False] * city_lengthprovince = 0for i in range(city_length):if not city_visit[i]:quene = collections.deque([i])while quene:now = quene.popleft()city_visit[now] = Truefor j in range(city_length):if isConnected[now][j]==1 and not city_visit[j]:quene.append(j)province += 1return province

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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...