断开连接图中的BFS用于检查二分图

时间:2016-01-30 11:26:07

标签: python graph breadth-first-search

我正在使用python解决问题BUGLIFE。我只需要在图的所有组件中进行BFS遍历,并适当地为节点着色。 这是我在python中编写的代码,我不知道,为什么我在这里得到WA(错误的答案):

def bfs(graph, start, visited=set()):
    queue = [start]
    A, C = set(), set()
    while queue:
        node = queue.pop(0)
        if node not in visited:
            visited.add(node)
            queue.extend(graph[node] - visited)
            # color nodes
            if node in A:
                C = C.union(graph[node])
            elif node in C:
                A = A.union(graph[node])
            else:
                A.add(node)
                C = C.union(graph[node])
        if A.intersection(C):
            return 0
    if len(visited) == len(graph):
        return 1
    else:
        for vertex in (set(graph) - visited):
            return bfs(graph, vertex, visited)

S = int(raw_input())
for s in range(1, S+1):
    B, I = map(int, raw_input().split())
    graph = {}
    for bug in range(1, B+1):
        graph.update({bug: set()})

    for interaction in range(I):
        x, y = map(int, raw_input().split())
        graph[x].add(y)
        graph[y].add(x)

    result = bfs(graph, 1)
    print('Scenario #%d:' % s)
    if result:
        print('No suspicious bugs found!')
    else:
        print('Suspicious bugs found!')

这是作业:

  

Hopper教授正在研究一种罕见的虫子的性行为。他假设他们有两种不同的性别,他们只与异性的错误相互作用。在他的实验中,个别错误及其相互作用很容易识别,因为数字印在他们的背上。

     

给出一个bug交互列表,确定实验是否支持他假设两个性别没有同性恋错误,或者它是否包含一些错误的错误交互。

     

输入

     

输入的第一行包含场景数。每个场景以一行给出,给出了由单个空格分隔的错误数(至少一个,最多2000个)和交互数(最多1000000)。在以下行中,每个交互以两个不同的错误号的形式给出,由单个空格分隔。错误从一开始连续编号。

     

输出

     

每个场景的输出都是包含“Scenario #i:”的行,其中i是从1开始的场景编号,后面跟着一行说“找不到可疑错误!”如果实验符合如果Hopper教授的假设肯定是错误的,那么他就错误的性行为或“发现可疑的错误!”的假设。

     

实施例

     

输入:

2
3 3
1 2
2 3
1 3
4 2
1 2
3 4
     

输出:

Scenario #1:
Suspicious bugs found!
Scenario #2:
No suspicious bugs found!

0 个答案:

没有答案