用 Python 编写程序检查给定图是否为二分图
假设我们有一个无向图,我们必须检查该图是否为二分图。我们知道,当我们可以将图的节点分成两个集合 A 和 B 时,图是二分图,这样图中的每个边 {u,v} 在 A 中都有一个节点 u,在 B 中有一个节点 v。
因此,如果输入如下

则输出将为 True,[0,4] 在集合 A 中,[1,2,3] 在集合 B 中,并且所有边都是从 A 到 B 或 B 到 A,而不是从 A 到 A 或 B 到 B。
为了解决这个问题,我们将遵循以下步骤−
定义一个函数 dfs() 。这将获取源
对于 graph[source] 中的每个顶点,执行
如果 color[vertex] 不等于 -1,则
如果 color[vertex] 与 color[source] 相同,则
result[0] := False
返回
进行下一次迭代
color[vertex] := 1 - color[source]
dfs(vertex)
从主方法中,执行following−
n := arr 的大小
graph := 0 到 n-1 顶点的空邻接列表
对于 0 到 n 范围内的 i,执行
对于 arr[i] 中的每个 j,执行
将 i 插入 graph[j]
将 j 插入 graph[i]
color := 大小为 n 的列表并用 -1 填充
result := 具有一个 True 值的列表
对于 0 到 n 范围内的 i,执行
如果 color[i] 与 -1 相同,则
dfs(i)
返回 result[0]
让我们看看下面的实现以便更好地理解 −
示例
from collections import defaultdict class Solution: def solve(self, arr): n = len(arr) graph = [set() for i in range(n)] for i in range(n): for j in arr[i]: graph[j].add(i) graph[i].add(j) color = [-1] * n result = [True] def dfs(source): for child in graph[source]: if color[child] != -1: if color[child] == color[source]: result[0] = False return continue color[child] = 1 - color[source] dfs(child) for i in range(n): if color[i] == -1: dfs(i) return result[0] ob = Solution() graph = [[1,2,3],[0],[0,4],[0,4],[2,3]] print(ob.solve(graph))
输入
graph = [[1,2,3],[0],[0,4],[0,4],[2,3]]
输出
True
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

