【问题标题】:Graph is cycle search图是循环搜索
【发布时间】:2021-05-05 10:15:21
【问题描述】:

我对图表有疑问。

在我的 API 中,我需要检查包含对象 ID 之间关系的列表在保存到数据库之前是否有圆圈。

提供给我的信息如下所示:

[
{10, 2},
{20, 32},
{45, 90}
]

因此,我需要检查关系的形式和周期。

示例:

如果我有
[{1, 6}, {3, 1}, {3, 4}, {4, 3}, {5, 2}, {5, 3}, {5, 4}, {6, 4}, {6, 5}]
会有2个圈子:

  • 第一个将是3 → 4 → 3 和
  • 第二个将是6 → 4 → 3 → 1 → 6

注意事项:
我需要使用的语言是 C#。该程序必须尽可能快,并且我无权访问数据库以在那里创建任何函数。另外,我不需要获取所有可能的圈子。我只需要一个就足够了,以便返回TRUE 或FALSE。

谁能给我一些建议?

【问题讨论】:

  • 我认为唯一的方法是构建图表并开始遵循所有可能的路线(它们应该是有限的)。如果一条路由循环回任何“已访问”节点,则返回 false。
  • 最简单的解决方案:假设每条边的权重为-1(负值)并运行en.wikipedia.org/wiki/…。它将产生 O(|V| * |E|) 的输出,这是非常合理的。
  • asp.net-core 标签似乎完全不相关。顺便说一句,您有一对点,但指出的示例圆圈仅用单个数字表示,这是概念上的不一致。你应该说得更清楚。我可以看到第一个圆圈是如何轻松形成的,但第二个圆圈却没有。

标签: c# asp.net-core graph graph-algorithm


【解决方案1】:

您在这里提到的问题只是在有向图中找到一个循环。您可以在best algorithm for detecting cycles in a directed graph 上关注此堆栈溢出帖子。我认为@KurtPeek 已经给出了一个非常好的答案,其中包含详细的解释和示例 python 代码。考虑阅读该帖子并在C# 中实施。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2013-10-07
    • 2013-08-28
    相关资源
    最近更新 更多