【问题标题】:Get Only Ring Nodes from a diagram从图中仅获取环形节点
【发布时间】:2016-02-23 14:13:57
【问题描述】:

我遇到了一个问题,需要我获取环内的节点。我写了一个递归方法,但它没有做我想要的,所以我需要一些帮助。

下面的picture 解释了我正在寻找的东西,因为我很难解释它。

给定根节点 0,我想从那些基本上是 0 , 1 , 2 , 7, 8, 9 的节点获取环

请记住,每个节点都包含与其连接的节点列表,因此节点 0 与节点 1 和节点 9 都与其连接。所以一切都在那里,但我无法获得正确的逻辑来获得那个戒指。这是我写的方法,但不幸的是它不适用于所有图表。

    private bool SetMainRingList(StructureFeature strct, StructureFeature root, List<StructureFeature> mainRing) {
        if ((strct.Equals(root) && mainRing.Contains(strct))) {
            return false;
        }
        var children = strct.GetConnectedStructures();
        if ((children.Contains(root) && mainRing.Contains(strct))) {
            return false;
        }
        mainRing.Add(strct);
        foreach (var structureFeature in children) {
            if (mainRing.Contains(structureFeature)) {
                var strcture = mainRing.Find(x => x.Oid == structureFeature.Oid);
                if (strcture.ParentFeature == null)
                    continue;
                if (strcture.ParentFeature.Equals(root)) {
                    bool skip = false;
                    var crntChildren = strcture.GetConnectedStructures();
                    foreach (var childContainerse in crntChildren) {
                        if (!mainRing.Contains(childContainerse)) {
                            skip = true;
                            break;
                        }
                    }
                    if (!skip)
                        return false;
                }
                continue;
            }
            structureFeature.ParentFeature = strct;
            var leaf = SetMainRingList(structureFeature, root, mainRing);
            var exchangeSite = structureFeature as ExchangeStructure;
            if (leaf && ReferenceEquals(exchangeSite, null)) {
                mainRing.Remove(structureFeature);
            } else {
                return false;
            }
        }
        return true;
    }

【问题讨论】:

标签: c# recursion diagram ring


【解决方案1】:

据我了解,您有一个图表,需要获取参与循环的节点。

这里可以使用找桥算法,删除对应的结点形成网桥。这样最后剩下的结点就形成环了。

【讨论】:

  • 它不是一个热链接@Ian,只是解释了使用哪种算法。
  • 好的 - 所以如果你详细说明算法、涉及的步骤或伪代码,那么这将改善你的答案。就目前而言(假设这些链接有一天会消失)这不是一个很好的答案。
  • 很好,我从没想过 :D 我专注于拿到戒指,没想到反过来做,我会试一试,谢谢
  • @Ian ,这可能不是很好的答案,但它会解决他的问题。我没有时间写伪代码。现在我将删除引用。
猜你喜欢
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2014-08-01
  • 2019-04-30
相关资源
最近更新 更多