单连接图的特殊情况

时间:2019-05-28 06:55:25

标签: algorithm graph tree

我正在尝试编写一种算法,以确定一个给定图是否单独连接。家庭作业的定义是,单个连接的图表示两个节点之间,最多只有一条简单路径。

我看到很多答案,这里说对每个节点使用DFS访问,并且如果访问了一个黑色节点,则意味着有两条简单路径。结果,给定的图不简单地连接起来。

我重写了DFS算法来实现这一点,但是问题是它可以解决所有给定的图,除了一种特殊情况。我已经考虑过两个节点之间存在多个边缘的情况,但这是行不通的。

所以我的问题是,是否有任何特殊情况无法通过对每个节点使用DFS访问来解决?

def dsf(self, source):
    source.color = 'g'
    for node in source.next:
        if node.color == 'w':
            if not self.dsf(node):
                return False
        elif node.color == 'b':
            return False
    source.color = 'b'
    return True

如果dsf遇到黑色节点,它将返回False并终止该函数。

def singly(self):
    for node in self.nodes:
        if not self.dsf(node):
            return False
        self.__clear()
    return True

然后使用此功能检查图形中的每个节点。 Self .__ clear可以将所有节点的颜色重置为白色。

除了一种特殊情况外,该算法适用于所有情况。

1 个答案:

答案 0 :(得分:0)

Is there any special case which can not be solved by using DFS-visit for each node?

否,dfs必须完美解决您的问题。

请继续尝试查找错误。这个code可能会对您有所帮助。它会计算无向图中的所有连接组件。