首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: DFS查找二分图

Python: DFS查找二分图
EN

Stack Overflow用户
提问于 2018-05-17 17:37:19
回答 1查看 1.1K关注 0票数 0

我正在尝试转换DFS程序,以检查图是否为二分图。我想要通过路径,并发送访问的节点到不同的子集,只要他们不相邻。例如:

如果路径是这样的: 1->2->3->4->5

两个子集应该如下所示:

代码语言:javascript
复制
[1,3,5] [2,4]

以下是DFS代码:

代码语言:javascript
复制
def dfs(x, node, visited):
if node not in visited:
    visited.append(node)
    for n in x[node]:
        dfs(x,n, visited)
return visited
EN

回答 1

Stack Overflow用户

发布于 2018-05-17 17:56:31

对二分性的测试是通过在执行DFS时用交替颜色“着色”相邻节点来完成的,如果任何两个节点都有相同的“颜色”,则图不是二分图。可以通过在执行DFS时将节点放入两个不同的集合来做到这一点:

代码语言:javascript
复制
def bipart(x, node, visited, set1, set2):
    if node in set2:                   # if a node has already been put into the other set, the graph is not bipartite
        return False
    if node not in visited:            # if we haven't seen this yet
        visited.add(node)              # mark it as visited
        set1.add(node)                 # put it in the first set
        for n in x[node]:              # for each neighbor
            bipart(x, n, set2, set1)   # put it into the other set
    return True                        # if we get here we have separated the graph into two sets where all the neighbors of a node in one set are in the other set.

注意,我把visited变成了一个集合,而不是一个列表,因为检查一个集合的成员资格更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50397442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档