У меня возникла проблема, требующая от меня получить узлы, которые находятся внутри кольца. Я написал метод 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;
}
Перекрестная ссылка на http://gis.stackexchange.com/questions/181894/diagram-ring-elements-locator-tough-problem – PolyGeo