1) структура (если отойти от множеств) - это всем знакомое [генеалогическое] дерево, где множество корней (узлы уровня 0) - это предки всех детей. Условия а) и б) связывают узлы одним ребром (по терминологии графов), т.е. уровень (терминология TreeView) родителя на 1 больше уровня ребёнка. Из условия с) следует, что всегда есть путь от А к Б через В, причём получается, что сначала к узлам В причисляются ближайшие к А и Б, потом более отдалённые, в итоге весь промежуточный путь от А к Б - это узлы В. Итак на уровне 0 будет несколько ветвей (деревьев). Берёте первое дерево и все узлы на нём - родственники между собой. Т.е. неродственники - только те, у которых разные предки уровня 0.
2) Как сформировать дерево? Один из способов - завести базу данных. Стандартные поля: номер узла, номер узла родителя (если родителя нет, то null), название (имя). Далее селекты.
|