Python中的二分图2025 年 1 月 5 日 | 11 分钟阅读 在本教程中,我们将学习二分图以及检查给定图是否为二分图的方法。 二分图是指可以将其顶点分成两个独立集合的图。设这两个集合为 S1 和 S2。这两个集合将包含元素 s1 和 s2,其中 s1 和 s2 通过图中的边相连。因此,元素 (s1, s2) 是将顶点从集合 S1 连接到第二个集合的顶点 s2 的边。此外,一个集合中的元素不能相互连接。 如果可以使用两种颜色为图的顶点着色,并且所有相邻节点的对都具有不同的颜色,则称该图为二分图。 如果可以使用两种颜色进行图着色,使得集合中的顶点着相同的颜色,则二分图是可能的。请注意,具有偶数环的循环图可以使用两种颜色进行着色。例如,请参见下图。 具有奇数环的循环图无法使用两种颜色进行着色。 检查图是否为二分图的算法 检查图是否为二分图的简单方法是为每个节点着色。我们将使用两种颜色,并为每个节点着上替代颜色。如果我们能够为每个节点着色,并且没有相邻节点具有相同的颜色,那么该图就是二分图;否则,它就不是。 我们将为当前顶点着色,并为其邻居着上替代颜色。这样,我们将遍历每个顶点并为节点着色。如果在任何时候发现父节点和相邻节点具有相同的颜色,我们将停止算法并打印出给定图不是二分图。 代码 输出 The given graph is not a Bipartite graph 时间复杂度:我们正在遍历大小为 V * V 的邻接矩阵的元素。在最坏的情况下,我们将遍历矩阵的每个元素;因此,时间复杂度为 O(V * V)。 空间复杂度:我们创建了一个队列和一个数组来存储顶点的颜色。因此,空间复杂度为 O(V)。 我们创建的算法仅适用于单连通图。如果图有多个组件,则只会遍历一个组件。我们需要修改代码,使其适用于多个组件。我们将从源 0 开始,并且我们知道连通的节点将被访问。没有边的图是二分图。这是因为,在二分图中,单个集合中的节点不应与其自身相连。 我们将修改代码以处理这些情况。将为图的每个组件调用 BFS 遍历,直到访问完图的所有节点。 代码 输出 The given graph is not a Bipartite graph 时间复杂度:我们遍历总的顶点和边数。因此,时间复杂度为 O(V + E)。 空间复杂度:我们创建了一个数组来存储已访问的节点。因此,空间复杂度为 O(V)。 在上面的示例中,图由邻接矩阵表示。如果图由邻接列表表示怎么办?因此,现在我们将看到邻接列表上的 BFS 遍历。此算法的时间复杂度将为 O(V + E)。这是一个通用算法,适用于单连通图和多连通图。 代码 输出 The graph is a bipartite graph 时间复杂度:此方法的时间复杂度与上一个算法相同,即 O(V * V)。 空间复杂度:我们创建了一个数组来存储已访问的节点。因此,空间复杂度为 O(V)。 让我们看看如果给定图的邻接列表,如何检查图是否为二分图 代码 输出 The graph is a bipartite graph 时间复杂度:如果以邻接列表的形式遍历图,时间复杂度将降低到 O(V + E),其中 V 是图中的顶点数,E 是图中的边数。 空间复杂度:我们创建了一个数组来存储已访问的节点。因此,空间复杂度为 O(V)。 下一主题检测无向图中的环(Python) |
传教士与食人族问题是一个古老的逻辑谜题,多年来一直吸引着数学家、计算机科学家和谜题爱好者。这是一个引人入胜的挑战,涉及用一艘小船将三名传教士和三名食人族渡过一条水道,同时遵守严格的规定...
阅读 10 分钟
?函数在 Python 中被视为一等对象。在一种语言中,一等对象始终保持一致。数据结构、控制结构和参数传递是它们的一些可能用途。如果一种编程语言将函数视为一等对象,那么它就被认为...
阅读 10 分钟
简介 数据系统和算法是计算机科学和编程的基本构建模块。它们对于高效解决问题、软件开发和构建强大的程序至关重要。Python 以其简单性和灵活性而闻名,是新手和有经验的程序员都喜欢的语言选择。如果...
阅读 6 分钟
简介 Python 及其简洁性和可读性使其成为处理各种编程任务(包括数字操作)的流行选择。一个常见的任务是从作为字符串提供的数字中删除前导零。这个看似简单的操作可以通过多种方式实现,每种方式都有其优点...
阅读 3 分钟
? Python 中使用 split() 方法可以有效地处理在空格上分割字符串。当不带参数调用此内置方法时,它会在每个空格字符(空格、制表符、换行符)处分割字符串,将连续的空格视为单个分隔符。例如,"Hello world\nPython\tprogramming".split() 的结果是 ['Hello', 'world',...
11 分钟阅读
Python 强大的库和集成的语法使其成为数据操作任务的流行语言。本文探讨了在 Python 的数据驱动的世界中高效处理和读取数据的非凡方法、库和精细实践。引言 数据操作是数据科学和机器学习中的一项任务……
7 分钟阅读
它使开发者能够以编程方式与 Smartsheet 的阶段进行交互,自动化操作、与其他工具集成,并在 Smartsheet 内部执行广泛的信息操作。对于管理项目、跟踪信息以及在 Smartsheet 内部协作工作流的团队来说,它非常有用,因为它扩展了超越以下内容的功能...
阅读 4 分钟
引言 数据操作是数据分析的一个基本方面,而 Python 的 Pandas 库是实现这一目标的一个强大工具。Pandas 中一个特别有用的功能是 str.extract() 方法,它允许您使用正则表达式从字符串 Series 中提取子字符串。在...
阅读 3 分钟
? Python 中的 datetime 模块提供了用于处理日期和时间的类。有时,您需要将一个需要时间信息的日期更改为一个完整的 datetime 对象。在 Python 中有多种转换日期的方法,具体取决于...
5 分钟阅读
图,那些看起来纠缠不清、带有节点和线条的东西,在数学中非常有用。它们有助于解决计算机网络或研究化学品形状等棘手问题。它们也是解决城市交通、寻找最佳路线甚至破译...
阅读 16 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India