Доброго времени суток, форумчане.
У меня есть задача которую надо реализовать на С++:
| Цитата | Пусть нам даны два непересекающихся множества A и B одинакового размера n. Нужно найти множество из n пар (a,b), таких, что a принадлежит A, b принадлежит B и они удовлетворяют некоторым условиям. Для выбора таких пар существует много различных критериев; Один из них называется правилом стабильных браков. Предположим, что A – множество мужчин, а B – женщин. У каждого мужчины и женщины есть различные правила предпочтения возможного партнера. Если среди n выбранных пар существуют мужчины и женщины, не состоящие между собой в браке, но предпочитающие друг друга, а не своих фактических супругов, то такое множество браков считается нестабильным. Если же таких пар нет, то множество считается стабильным. Причем заметим, что правила предпочтения постоянны и в процессе выбора не изменяются. Это упрощает задачу, но сильно искажает действительность.
Указания: Один из путей поиска решений: пробовать объединять в пары элементы двух множеств до тех пор, пока они не будут исчерпаны. Намереваясь найти все устойчивые распределения можно пользоваться следующей схемой. Пусть TRY(m)-алгоритм поиска супруги для мужчины m, причем этот поиск идет в порядке списка предпочтения именно этого мужчины.
| Код | Procedure TRY(m); Var r: rank ; Begin For r:= 1 to n do Выбор r-ой претендентки для m; If допустимо then запись брака; If m – не последний then TRY(successor(m)) Else записать стабильное множество End; Отменить брак End End End TRY;
|
Далее важно как представлять данные. Исходные данные представляют собой две матрицы, задающие предпочтительных партнеров для мужчин и женщин. Результатом работы алгоритма является массив женщин X, причем X[m] соответствует партнерше для мужчины m.
|
У меня есть реализация данной задачи на паскале: http://radikal.ru/F/s41.radikal.ru/i093/0905/6c/88ce0afd86d6.png.html http://radikal.ru/F/s54.radikal.ru/i146/0905/51/f2cbb31d2af4.png.html
Проблема лишь в том что сама я эту программу написать на С++ не могу, не хватает опыта(
|