我正在尝试编写一种算法,以确定一个给定图是否单独连接。家庭作业的定义是,单个连接的图表示两个节点之间,最多只有一条简单路径。
我看到很多答案,这里说对每个节点使用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可以将所有节点的颜色重置为白色。
除了一种特殊情况外,该算法适用于所有情况。
答案 0 :(得分:0)
Is there any special case which can not be solved by using DFS-visit for each node?
否,dfs必须完美解决您的问题。
请继续尝试查找错误。这个code可能会对您有所帮助。它会计算无向图中的所有连接组件。