Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.11.2008, 18:30
Ленивица Ленивица вне форума
Прохожий
 
Регистрация: 02.11.2008
Сообщения: 2
Репутация: 10
По умолчанию Помогите с задачей

Здравствуйте. Вот возникла роблемка с задачкой.

Пусть задано конечное множество имен жителей некоторого города, причем для каждого жителя перечислены имена его детей. Перечислите все пары жителей города, которые являются родственниками, причем жители А и Б называются родственниками, если:
a) А – это ребенок Б;
b) Б – это ребенок А;
c) существует некий В такой, что А является родственником В, а В является родственником Б

Как это написать?
Если вдруг тему не там создала, сорри. Очень нужна помощь.
Ответить с цитированием
  #2  
Старый 05.11.2008, 14:00
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

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

2) Как сформировать дерево? Один из способов - завести базу данных. Стандартные поля: номер узла, номер узла родителя (если родителя нет, то null), название (имя). Далее селекты.
Ответить с цитированием
  #3  
Старый 05.11.2008, 15:12
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Думаю, можно обойтись обычным графом. Тянуть сюда БД - лишнее.
Структура узла:
Код:
TNode: record
  Name: string;
  Parents: Array of ^TNode;
  Sons: Array of ^TNode;
end;
1. Заполняем массив (или список) жителей. Для каждого жителя ищем родителей. Потомки нам известны по условию задачи.
2. Собственно для решения все готово. Берем первого жителя и выбираем всех из списков Parents и Sons. После чего для каждого из них повторяем эту процедуру. Набирается список родственников 1-го жителя.
3. Повторяем пункт 2 для тех кто еще не попал в родственники.
4. и т.д.
Ответить с цитированием
  #4  
Старый 06.11.2008, 19:12
Ленивица Ленивица вне форума
Прохожий
 
Регистрация: 02.11.2008
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо огромное за помощь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025