Python中检测无向图中的循环2025 年 1 月 5 日 | 阅读 10 分钟 在此问题中,我们将被给定一个无向图。我们在该问题中的任务是判断给定图是否存在环。 让我们通过一些图示来理解图中的环是什么样的。 示例 输入: N = 8, E = 8 输出: 是 解释: 图表显示存在一个环。 方法 - 1在第一种方法中,我们将使用深度优先搜索 (DFS) 算法来查找图中的环。 计划是对邻接表的所有未访问节点使用 DFS 算法。我们必须多次使用该算法,以确保连通分量也被遍历并检查它们是否包含环。我们将创建一个数组来记录当前节点是否已被访问。此外,我们还需要记录当前节点的父节点。对于当前节点的每个邻居,我们仅当该节点未被访问时才递归调用函数来检测环。但是,如果该节点已被访问,我们将检查该节点是否是当前节点的父节点;如果是,则它不能构成环。但如果当前节点不是父节点,并且仍然已被访问,则意味着图中存在环。让我们通过一个例子来理解这个概念。 考虑一个图
代码 输出 The graph contains a cycle The graph doesn't contain a cycle 时间复杂度: 由于我们维护了已访问节点数组,因此我们不会对某个节点调用 detect() 函数两次以上。因此,我们只访问每个节点和边一次。因此,DFS 算法的时间复杂度是线性的。总时间复杂度等于顶点数和边数之和,即 O(V+E),其中 V 是顶点数,E 是边数。 辅助空间: 我们使用空间来存储已访问数组。因此,空间复杂度为 O(V)。用于存储递归栈的空间。 方法 - 2在这种方法中,我们将使用 BFS 算法来检测给定图中的环。 在广度优先搜索算法中,我们按层级访问节点。首先,我们完成访问特定级别的节点,然后移至下一个级别。BFS 算法是使用队列数据结构实现的。队列在 BFS 中使用,因为队列遵循先进先出 (FIFO) 的方法。因此,我们访问同一级别的所有节点,因为它们会比下一级别的节点先添加到队列中。 这里的 BFS 将被修改。正如我们在前一种方法中所见,检测环的基本思想是检查节点是否已被访问,如果已被访问,则它不应该是当前源节点的父节点。因此,我们需要跟踪当前源节点的父节点。因此,在队列中,我们不仅添加节点,还添加一个包含节点及其相应父节点的列表,以便在每次迭代中检查已访问节点是否与父节点不同。 我们将按照以下步骤解决此问题。
以下是此方法的 Python 程序。 代码 输出 The graph contains a cycle The graph doesn't have a cycle 时间复杂度: 我们使用线性循环来遍历图。由于我们只访问邻接表的每个节点一次,因此迭代次数等于顶点数和边数之和。因此,时间复杂度为 O(V+E)。 空间复杂度: 我们使用 O(V) 内存来存储已访问数组。 下一主题岛屿数量问题-Python |
?图像尺寸简介 在我们讨论代码之前,让我们首先定义图像“尺寸”对我们意味着什么。简而言之,图像是一组像素,其中每个像素表示颜色的一小部分。图像的宽度是……
7 分钟阅读
Python 和 C# 是两种流行的通用编程语言,它们在编程行业产生了重大影响。这两种语言都是面向对象的,并为各种应用程序提供了快速开发和出色的性能。然而,它们具有独特的特征和属性,使它们彼此区分开来,这可以...
阅读 6 分钟
简介 与 C 或 Java 等语言不同,Python 不直接支持自增 (++) 和自减 (--) 运算符。但是,你可以分别使用 += 和 -= 运算符来实现类似的结果。例如,要增加 x,你可以写 x += 1...
阅读 3 分钟
在本教程中,我们将介绍各种 Python 项目,适合从初学者到经验丰富的开发人员的每个人。这些项目旨在为您提供 Python 的实践经验,让您开发实用的应用程序。无论是刚开始接触...
阅读 22 分钟
?在 Python 中,文件读写和创建都被内置了。在 Python 中可以处理的文件有两种:二进制文件(以二进制语言,即 0 和 1 编写)和文本文件。有六种不同的文件访问方式。只读('r')是……
阅读 4 分钟
传教士与食人族问题是一个古老的逻辑谜题,多年来一直吸引着数学家、计算机科学家和谜题爱好者。这是一个引人入胜的挑战,涉及用一艘小船将三名传教士和三名食人族渡过一条水道,同时遵守严格的规定...
阅读 10 分钟
矩阵运算本身是大多数科学和工程计算的基础。在 Python 中进行矩阵操作,PYTHON 的内部库中有一个名为 NumPy 的丰富包。然而,在执行线性代数运算时,可能会出现某些错误,这些错误并非由编程错误引起,而是因为...
阅读 4 分钟
基本 URL 基本 URL 是网站或资源的主地址。它作为构建其他相对 URL 的基础。把它想象成所有其他 URL 分支的根。通常,基本 URL 包括域名...
阅读 4 分钟
引言:在本教程中,我们正在学习关于 . Keras 提供了 numpy 实用库,该库提供了对 numpy 数组进行操作的函数。使用 to_categorical() 方法,您可以将表示变量的数字数组(或)向量转换为具有多个...的数字(或)矩阵。
阅读 3 分钟
三元图简介三元图是三角形图,用于表示三个组成部分之和恒定的数据,例如比例或百分比。三角形的每个顶点代表一个纯粹的组成部分,三角形内的点显示所有组成部分的相对贡献...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India