2016-02-23 18 views
2

我面临一个问题,需要我获取环内的节点。我写了一个recursie方法,但它没有做我想做的事,所以我需要一些帮助。从图中只获取环节点

下面的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; 
    } 
+0

交叉发布到http://gis.stackexchange.com/questions/181894/diagram-ring-elements-locator-tough-problem – PolyGeo

回答

-1

从我的理解,你有一个图形,需要获取参与循环的节点。

在这里您可以使用桥接查找算法并删除相应的节点组成桥,因此最后留下的节点将形成环。

+0

请不要只是热链接。如果适用,请提供解决方案说明和示例代码。 – Ian

+0

有一个,为什么要投票? –

+0

它不是热门链接@Ian,只是解释了要使用哪种算法。 –