【每日力扣中医养生】力扣2608. 图中的最短环

news2024/9/23 3:21:46

2608. 图中的最短环

文章目录

  • 【每日力扣&中医养生】力扣2608. 图中的最短环
    • 题目描述
    • 示例
      • 示例 1
      • 示例 2
    • 输入输出说明
    • 解题思路
      • Python代码
      • 复杂度分析
      • 总结


【每日力扣&中医养生】力扣2608. 图中的最短环

《黄帝内经》阴阳应象大论篇第五,提到“秋伤于湿,冬生咳嗽”,因此秋天一定要注意祛湿,关于祛湿茶有很多,可以直接买祛湿凉茶,也可以自己去买五花茶来冲泡,祝身体健康
在这里插入图片描述

题目描述

在一个包含 n 个顶点的双向图中,每个顶点按照从 0n - 1 标记。图中的边由二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 uivi 之间存在一条边。每对顶点最多通过一条边连接,并且不存在与自身相连的顶点。

任务是返回图中最短环的长度。如果不存在环,则返回 -1

是指以同一节点开始和结束,并且路径中的每条边仅使用一次。

示例

示例 1

输入:

n = 7
edges = [[0, 1], [1, 2], [2, 0], [3, 4], [4, 5], [5, 6], [6, 3]]

输出:

3

解释:

最短的环是 0 -> 1 -> 2 -> 0,长度为 3。

示例 2

输入:

n = 4
edges = [[0, 1], [0, 2]]

输出:

-1

解释:

图中不存在环。

输入输出说明

  • 输入:

    • 整数 n,表示图中的顶点数。
    • 二维整数数组 edges,表示图中的边。
  • 输出:

    • 返回最短环的长度,若不存在环,则返回 -1

解题思路

为了解决这个问题,我们可以采用 广度优先搜索(BFS) 算法。具体思路如下:

  1. 图的表示: 使用邻接表来表示图结构。将所有的边记录下来,并为每个节点创建一个邻接表。

  2. BFS搜索: 对于每个节点,以该节点为起点进行广度优先搜索,检测是否存在环。具体来说,我们从一个节点出发,遍历与其直接相连的节点。对于相邻节点,如果相邻节点未访问过,则继续向下遍历;如果相邻节点已经访问过且不是父节点(不存在两个点的环),则说明从start相邻节点,还有从start当前节点的最短距离都已经有了,那么就能计算出对应的环的最短长度。

  3. 更新最短环: 在每次找到一个环时,更新当前已知的最短环的长度。

  4. 特殊情况处理: 如果最终没有找到任何环,则返回 -1

Python代码

class Solution:
    def findShortestCycle(self, n: int, edges: List[List[int]]) -> int:
        # 邻接表,建图
        graph = [[] for _ in range(n)]
        for x, y in edges:
            graph[x].append(y)
            graph[y].append(x)

        def bfs(start):

            # 记录从start出发,到达各点的最短的距离
            distance = [-1] * n
            distance[start] = 0

            # 记录最短的环长度
            res = inf

            # 队列中,按照[当前节点,父节点]为一组
            queue = deque([[start, -1,]])

            while queue:
                cur, fa = queue.popleft()

                for nxt in graph[cur]:
                    # 如果到达nxt的最短距离还没计算,则说明未访问过nxt
                    if  distance[nxt] == -1:
                        distance[nxt] = distance[cur] + 1
                        queue.append([nxt, cur])
                    # 如果访问过nxt,且nxt不为父节点(两个点不能构成环)
                    # 则考虑是否为最短环
                    elif nxt != fa:
                        res = min(res, distance[cur] + distance[nxt] + 1)


            return res

        ans = min((bfs(i) for i in range(n)))
        if ans != inf:
            return ans
        else:
            return -1

复杂度分析

  • 时间复杂度:

    • 构建邻接表的时间复杂度为 O ( E ) O(E) O(E),其中 E E E 是边的数量。
    • 对每个节点执行 BFS 的时间复杂度为 O ( V 2 ) O(V^2) O(V2),其中 V V V 是节点的数量。
  • 空间复杂度:

    • 需要存储邻接表,占用 O ( V 2 ) O(V^2) O(V2) 的空间,最坏情况下是稠密图。
    • BFS 队列和距离数组的空间复杂度为 O ( V ) O(V) O(V)
    • 因此,空间复杂度为 O ( V + E ) O(V + E) O(V+E)

总结

通过使用广度优先搜索(BFS)算法,我们能够有效地找到图中的最短环。如果图中没有环,算法将返回 -1。这是一种高效且简单的解决方案,能够在合理的时间复杂度内解决问题。

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

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

相关文章

Leetcode 209,713,3 滑动窗口 C++实现

Leetcode 209. 长度最小的子数组 问题:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组&#xff0c…

redis 遍渐进式历

1.scan cursor [match pattern] [coutn] [type]:以渐进式的方式进行建的遍历 cursor:是光标 指向当前遍历的位置 设置成0表示当前从0开始获取 math parttern :和keys命令一样的 keys * count: 限制一次遍历能够获取到多少个 元素默认是10 type :这次遍历只想获取…

数据库原理--关系模型简述

目录 一、关系模型研究什么 二、关系模型的三要素 三、关系模型与关系数据库语言的关系 一、关系模型研究什么 一个关系(relation)就是一个表(Table),关系模型就是处理Table的,它由三个部分组成: 描述DB各种数据的基本结构(Table/Relation)描述Table与Table之间…

Docker安装Redis集群记录

redis集群整体的安装效果 备注:本机docker容器的宿主机ip为192.168.0.200,下面的配置全部基于当前IP进行配置; 1 docker镜像下载使用的国内地址 vi /etc/docker/daemon.json{"registry-mirrors": ["https://ustc-edu-cn.mir…

苹果手机怎么还原删除的照片?4个【独门秘籍】都在这里了

苹果手机的拍照功能深受广大用户的喜爱,大家出行旅游也大都选择苹果手机拍照记录,因此手机相册也就成为用户们的【生活回忆录】。但是,我们总是会因为各种各样的原因导致相册里的照片消失不见,对此,我们要怎么还原删除…

《计算机组成原理》(第3版)课后习题答案

第1篇 概 论 1.什么是计算机系统、计算机硬件和计算机软件?硬件和软件哪个更重要? 答:计算机系统:由计算机硬件和软件两部分组成,计算机系统具有接收和存储信息、按程序快速计算和判断并输出处理结果等功…

武汉流星汇聚:亚马逊迎来中国力量,中国卖家推动跨境电商繁荣

随着全球化进程的加速和跨境电商的蓬勃发展,中国卖家正以前所未有的速度和规模涌入亚马逊这一全球领先的电商平台。他们的入驻不仅为亚马逊平台注入了新的活力与多样性,更在全球范围内产生了深远的积极影响与变革。 中国作为世界工厂,拥有庞…

一段式端到端vs两段式端到端,到底哪个好

在智能汽车领域,端到端自动驾驶技术正迅速成为行业焦点,不同的玩家实现路径也有差别。目前主流的端到端智驾方案有两类:一段式和两段式,针对这两种方案优缺点的讨论,也从未停止过。 “两段式”端到端和“一段式”端到端…

遥感之地理农业分区

在前面的文章有介绍关于中国区域进行分区研究的思路: 中国生态地理区划更新和优化 全国一米全要素分类数据集如何得到的?原文赏析! 根据不同的研究角度对中国区域进行分区,其结果只是细节不一样,大部分还是差不多的&a…

基于Django框架的图书管理系统,前台采用Bootstrap框架UI,后台EasyUI框架UI

程序开发软件:Pycharm 数据库:mysql 采用技术: Django(一个MVT框架,类似Java的SSM框架) 人生苦短,我用Python,咱们今天就来分享一个用Python语言开发的基于Django框架的图书管理系统吧。项目前台和后台界…

Python酷库之旅-第三方库Pandas(088)

目录 一、用法精讲 371、pandas.Series.sparse.density属性 371-1、语法 371-2、参数 371-3、功能 371-4、返回值 371-5、说明 371-6、用法 371-6-1、数据准备 371-6-2、代码示例 371-6-3、结果输出 372、pandas.Series.sparse.fill_value属性 372-1、语法 372-2…

麒麟系统离线安装docker

随着CentOS全面停服,国产操作系统会慢慢代替centos系统,在后续的项目中,项目部署的环境都必将是国产操作系统,本文就国产操作系统下如何离线安装docker,做下笔记分享 一、材料准备 1、国产操作系统 麒麟10,arm64v8 2、…

爱心商城系统pf

TOC springboot424爱心商城系统pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿沟&…

k8s上部署rancher

一、什么事rancher Rancher 是一个 Kubernetes 管理工具,让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群,创建节点并安装 Kubernetes,或者导入在任何地方运行的现有 Kubernetes 集…

不小心把回收站的照片删了怎么办?别急,这里有找回方法

在日常的数字生活中,照片无疑是我们记录生活点滴、珍藏美好回忆的重要载体。然而,在整理电脑文件时,一个不小心就可能将珍贵的照片误删,甚至从回收站(或称为垃圾箱、废纸篓)中彻底清空,让人懊悔…

如何关闭宝塔Linux面板的公网SSL证书?

前言 在安装宝塔Linux面板时,有时会不小心开启了公网SSL证书,导致需要通过HTTPS才能访问面板,如果你希望恢复到HTTP访问,可以通过图形界面和命令行两种方式来关闭SSL证书。本文将详细介绍这两种方法,并帮助你顺利完成…

2-70 基于matlab的三维装载约束下的货物循环取货路径优化模型建立

基于matlab的三维装载约束下的货物循环取货路径优化模型建立。包含文档说明。以配送中心为原点,分派多辆同一规格的货车到n个供应商处取货,最后回到配送中心。要求充分考虑货物车厢中的三维装载位置,确保每个零部件均能成功装载,尽…

AUTOSAR实战干货:NVM模块Block属性配置全解析

AUTOSAR实战干货:NVM模块Block属性配置全解析 前言 本文思维大纲如下: 继小T之前所写到的AUTOSAR NVM模块详细文章《AUTOSAR技术干货:CP NVM介绍与实战经验分享》, 小T今天将基于NVM模块中每个Block的重要属性配置一次性讲解清楚…

第132天:内网安全-横向移动Exchange服务有账户CVE漏洞无账户口令爆破

域控环境0day.org 通过网盘分享的文件:131-0day.org内网域环境镜像文件 链接: https://pan.baidu.com/s/1rf_gHVJSNG8PEsiSr7DFSw?pwdr5jc 提取码: r5jc 给win7设置一张nat网卡,其他各个主机都设置为vm2 案例一: 域横向移动-内网服务-Exchan…

turtle库 多圈文字旋转 代码开源

对文字旋转进行了升级 声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 效果:(视频要转GIF懒得弄了就截个图) 代码实现: # -*- coding: utf-8 -*- """ Creat…