算法刷题打卡第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

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
牛客计算器的改良(Python... 文章目录1.题目描述2.输入描述:3.输出描述:4.示例15.分析6.代码7.结语 链接࿱...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
正大杯|市调大赛|2023备赛... 关键信息 同时随着精细化养宠趋势的深入,宠物消费类目日渐丰富。 本报告通过 Niuco...
文本生成视频Make-A-Vi... Meta公司(原Facebook)在今年9月29日首次推出一款人工智能系...