あなたは川を渡る問題を知っています。並べ替えの説明は次のとおりです。
むかしむかし、3 人の人食い人種が 3 人の宣教師をジャングルに案内していました。彼らは最寄りの伝道所に向かう途中でした。しばらくすると、彼らは恐ろしいヘビや魚でいっぱいの広い川に到着しました。船がなければ川を渡ることができませんでした。幸いなことに、彼らは短い捜索の後、2 つのオールを備えた手漕ぎボートを見つけました。残念ながら、ボートは小さすぎて全員を運ぶことができませんでした。一度に 2 人を運ぶことはほとんどできませんでした。さらに悪いことに、川幅が広いため、漕ぐ以外にボートを戻す方法がありませんでした。宣教師たちは人食い人種を信頼できなかったので、6人全員を安全に川を渡らせる計画を立てなければなりませんでした。問題は、ある場所で宣教師よりも人食い人種の方が多いとすぐに、これらの人食い人種が宣教師を殺して食べてしまうことでした。したがって、私たちの宣教師兼プログラマーは、川の両側に少数派の宣教師が決していないことを保証する計画を考案する必要がありました。ただし、人食い人種は、それ以外の場合は協力すると信頼できます。具体的には、宣教師が潜在的な改宗者を捨てないのと同じように、彼らは潜在的な食べ物を捨てません。
私の質問はこの問題の一部です。可能なボート負荷のリストを返す関数を設計しようとしています (たとえば、boat_capacity が 3 の場合[(3mis, 0can), (2mis, 1can), (1mis, 1can), ...] )。関数の入力として num (宣教師または人食い人種の数) とボートの収容人数があります。
関数とアルゴリズムをどのように設計しますか?