![]() |
|
Модераторы: bsa |
![]()
|
|
| Jime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.6.2009 Репутация: нет Всего: нет |
Здравствуйте, помогите пожалуйста сделать задание на рекурсию. Ломаю голову над ней уже очень долго.
Задача: Задано конечное множество имен жителей некоторого города, причем для каждого из жителей перечислены имена его детей. Жителей X и Y называются родственниками, если(а) либо X - ребенок Y, (б) либо Y - ребенок X, (в) либо существует некоторый Z, такой, что X является родственником Z, а Z является родственником Y. Перечислите все пары жителей города, которые являются родственниками. ___________________________ Задание нужно выполнить без использования массивов, структур. Разрешено только посимвольное чтение из файла. Пример входного файла: маша(гриша, саша) саша(ваня) даша(маша) костя(илья) ваня(митя) Выходной файл: маша и гриша маша и саша гриша и саша маша и ваня гриша и ваня саша и ваня саша и митя маша и митя гриша и митя и так далее ____________________ Помогите плз написать поиск строк, которые являются родственными. Я буду очень благодарна. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вы уверены, что вам на С++ решение надо? я помню давным давно реализовывал подобную задачу то ли на Lisp, то ли на Prolog |
|||
|
||||
| Jime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.6.2009 Репутация: нет Всего: нет |
да, нужно на с++.
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вам нужно будет решить задачу связности. Connectivity problem. удачи |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вы в этом уверенны ? задача решается через построение графа(древа родственников), который без использования структур не представляем. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Вы в этом уверены? я прекрасно помню, как решал аналогичную задачу используя массив. не структуру. массив правда был семантически равнозначен дереву. но не графу. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Должна получиться вот такая динамическая структура :
массивом тут и не пахнет Можно конечно хранить в массиве, а при обходе строить список родственной линии. Разница будет в том, что при первом варианте сразу строится готовое древо, которая не будет иметь лишних затрат на обход, А во втором, для каждой пары родстванников вновь и вновь будет строится подходящая ветвь. Это сообщение отредактировал(а) mes - 24.6.2009, 10:25 |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
не обязательно. можно сопоставить именам индексы массива. было:
стало:
ну а дальше уже решить задачу свзяности. используя две абстрактные операции: объединение/поиск. Это сообщение отредактировал(а) zim22 - 24.6.2009, 10:23 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Я разве утверждал что мое решение единственное? А в результате то же самое древо. Только хранимое не как связанный список, а как массив связанных индексов. И в том и в другом случае нарушается условие: |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
не строиться, а перестраиваться. и это будет делаться очень быстро.
Это сообщение отредактировал(а) zim22 - 24.6.2009, 10:34 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Господа, вы не забыли, что топикстартеру нужно решить эту задачу через рекурсию?
2 Jime: какая то структура данных в любом случае понадобится. По крайней мере надо хранить исходный файл в удобном для обработке виде. Хотя можно и не хранить, а перечитывать его каждый раз Главная функция - принимает 2 имени и выдает флаг - родственники они или нет
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Не факт, про 'пару жителей' тоже вопрос открытый - может ли эта 'пара' состоять из одного и того же человека в 2х экземплярах? Если это запретить, то в начало функции is_relatives надо добавить
|
||||
|
|||||
| Jime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.6.2009 Репутация: нет Всего: нет |
Всем спасибо
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |