【发布时间】:2019-05-28 06:55:24
【问题描述】:
我正在尝试编写一个算法来确定给定图是否是单连接的。作业定义说,单连通图意味着在两个节点之间,最多有一个简单的路径。
我在这里看到很多答案说对每个节点使用 DFS-visit,如果访问了黑色节点,则意味着有两个简单的路径。结果,给定的图不是简单连接的。
我重写了 DFS 算法来实现这一点,但问题是它可以解决所有给定的图,除了一种特殊情况。我已经考虑过两个节点之间有多个边的情况,但它不起作用。
所以我的问题是,是否有任何特殊情况无法通过对每个节点使用 DFS-visit 来解决?
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 可以将所有节点的颜色重置为白色。
算法适用于除一种特殊情况之外的所有情况。
【问题讨论】:
-
那你为什么不介绍那个特殊情况呢?
-
看不到case,有点像HackerRank的测试用例
-
这是一个在线裁判系统。
-
您是否检查了程序在琐碎案例(0 和 1 个顶点)上的行为?
-
如果两个节点之间没有多重边,这并不意味着图是“单连接的”。你应该寻找多条路径,而不是边缘