【问题标题】:Special case in singly connected graph单连通图中的特殊情况
【发布时间】: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 个顶点)上的行为?
  • 如果两个节点之间没有多重边,这并不意味着图是“单连接的”。你应该寻找多条路径,而不是边缘

标签: algorithm graph tree


【解决方案1】:

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

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

继续尝试寻找错误。这个code 可能会对您有所帮助。它计算无向图中的所有连通分量。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2015-10-21
    • 2016-10-23
    • 1970-01-01
    • 2013-06-02
    • 2020-12-15
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多