2016-02-23 5 views
2

У меня возникла проблема, требующая от меня получить узлы, которые находятся внутри кольца. Я написал метод recursie, но он не делает то, что я хочу, поэтому мне нужна помощь в этом.Получить только кольцевые узлы из диаграммы

Ниже объясняется, что я ищу, так как мне трудно объяснить это.

дал корневой узел 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

его не горячая ссылка @ Ян, просто объяснил, какой алгоритм использовать. –