Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++&Pascal] Задача о стабильных браках


Автор: KillEmAll17 27.5.2009, 20:51
Доброго времени суток, форумчане.

У меня есть задача которую надо реализовать на С++:

Цитата

Пусть нам даны два непересекающихся множества 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


Проблема лишь в том что сама я эту программу написать на С++ не могу, не хватает опыта(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)