たとえば、7人の家族がいるとしましょう。
["John", "James", "Jenna", "Joseph", "Jane", "Jacob", "Joanne"]
彼らは皆、クリスマスプレゼントのシーズンに向けて準備をしています。彼らは、すべてがスムーズに機能することを確認するためのいくつかのルールに同意しました。
- 誰もが1つの贈り物をしなければなりません。
- 誰もが1つの贈り物を受け取らなければなりません。
- 誰も自分に贈り物をすることはできません。
- 誰も彼の配偶者に贈り物をすることはできません。(ジェーンとジョンは配偶者です)
- 彼が去年与えたのと同じ人に誰も与えることはできません。(昨年、ジョンはジェームズに、ジェームズはジェナに、ジェナはジョセフに、ジョセフはジェーンに、ジェーンはジェイコブに、ジェイコブはジョアンに、ジョアンはジョンに与えました)
- 最後に、2人がお互いに贈り物をすることはできません。たとえば、ジョンがジェナに寄付している場合、ジェナはジョンに寄付しない場合があります。
ルールは複雑であるため、これらのルールを守りながら、誰が誰に誰に与えることができるかを理解するのは困難でした。その結果、彼らは私を雇って、人々がお互いに与えることができるすべての可能な法的方法を表示するプログラムを書くようになりました。
この問題をエレガントに解決するためにどのアルゴリズムを使用できますか?