如何在对象层次结构中找到循环?

Muk*_*mar 4 java algorithm cyclomatic-complexity object-graph

有一个类Company,它引用了另一个Company表示的实例parent.比方说,有四家公司c1,c2,c3c4c2,c3,c4有母公司设置c1.

例如:

public class Company {
  public Company parent;

  public Company() { }
  public Company(Company parent) {
    this.parent = parent;
  }

  public static void main(String[] args) {
    Company c1 = new Company();
    Company c2 = new Company(c1);
    Company c3 = new Company(c1);
    Company c4 = new Company(c1);
}
Run Code Online (Sandbox Code Playgroud)

如果我们设置c2为以下的母公司c1:

c1.parent = c2;
Run Code Online (Sandbox Code Playgroud)

然后它将在公司层次结构中创建一个Cyclomatic Complexity无限循环,我们必须在系统中避免这种循环.

我们希望能够在运行时检测到这一点.在上述情况下,检查同一类对象的圈复杂度的最佳算法是什么?

Aiv*_*ean 6

您的任务与圈复杂度无关.您的实体基本上形成一个图形,并且您想要检测其中的循环.常见的方法是执行DFS.

你可以在互联网上找到很多如何做到这一点的例子.