给定一个未排序的边列表,我如何检测它们是否形成一个循环(图形)

时间:2018-04-02 11:37:56

标签: graph

我获得了一个边缘列表(每个边缘都有一个'From'和'To'属性,用于指定它们连接的顶点。)

如果它们不在此(无向)图形中形成循环,或者返回形成循环的列表,我想要返回null。

有谁知道我会如何处理这样的问题?我很无能。

2 个答案:

答案 0 :(得分:1)

我被教导这样做的方法包括存储一个访问过的顶点列表。

浏览图表,存储每个顶点并将其添加到列表中。每回合,将当前顶点与列表进行比较 - 如果它存在,则之前已经访问过它,因此处于循环中。

答案 1 :(得分:1)

此类算法称为Graph Cycle Detection Algorithms。根据应用程序的需要或问题的上下文,选择哪种算法有一些复杂性。例如,你想找到第一个周期,最短周期,最长周期,所有周期,图形是单向还是双向等?

有许多循环检测算法可供选择,这取决于需要和允许的计算复杂性以及循环的性质(例如,找到第一个,最长的等)。一些常见的算法包括以下内容:

  1. Floyd's Algorithm
  2. Brent's Algoritm(另见here
  3. Tarjan's Strongly Connected Components Algorithm(另见this Stack Overflow post
  4. 您选择的具体算法取决于您的需求以及算法的效率。如果需要高效率,我建议查看一些关于该主题的学术文章,并比较和对比各种算法的一些权衡。