Фон
Припустимо, є 2*n
люди, які мають одружитися, і припустімо, що кожну людину приваблюють саме n
інші люди з обмеженнями, які:
- Привабливість симетрична ; тобто якщо людина
A
притягується до людиниB
, то людинаB
притягується до людиниA
. - Атракція антитранзитивна ; тобто якщо людина
A
і людинаB
притягуються до людиниC
, то людинаA
і людинаB
не притягуються один до одного.
Таким чином, мережа атракціонів формує (непрямий) повний двосторонній графік Kn,n
. Ми також припускаємо, що кожна людина класифікувала людей, яких вони приваблюють. Вони можуть бути представлені у вазі ребер на графіку.
Шлюб спаровування , (A,B)
де A
і B
притягуються один до одного. Шлюб є нестабільним, якщо є інший шлюб, коли одна людина з кожного шлюбу могла б розлучитися зі своїм партнером і одружитися один з одним, і обидва закінчилися з тим, кого вони посіли вище, ніж колишнім партнером.
Мета
Ваше завдання полягає в тому, щоб написати повну програму або функцію, яка враховує вподобання кожної людини як вихідні дані і виводить шлюб для кожної людини таким чином, щоб кожен шлюб був стабільним.
Вхідні дані
Введення може бути в будь-якому зручному форматі; наприклад, зважений графік, упорядкований список налаштувань, словник / асоціація тощо. Ви можете за бажанням взяти загальну кількість людей як вхід, але не вводити жодного іншого введення.
Вихідні дані
Вихід також може бути в будь-якому зручному форматі; наприклад, список кортежів, мінімальна обкладинка краю , функція, яка асоціює кожну людину зі своїм партнером тощо. Зауважте, що єдиним обмеженням є те, що кожен шлюб є стабільним, інших вимог щодо оптимальності немає.
Примітки
- Ви можете знайти більше інформації та
O(n^2)
алгоритм вирішення цієї проблеми у Вікіпедії або цьому відеоролику Numberphile . Однак ви можете використовувати будь-який алгоритм. - Стандартні лазівки заборонені.
- Це код-гольф . Найкоротша відповідь (у байтах) виграє.