【发布时间】: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