Sie kennen die Probleme beim Überqueren von Flüssen . Hier ist eine Sortenbeschreibung:
Es waren einmal drei Kannibalen, die drei Missionare durch einen Dschungel führten. Sie waren auf dem Weg zur nächstgelegenen Missionsstation. Nach einiger Zeit kamen sie an einen breiten Fluss, in dem es tödliche Schlangen und Fische gab. Es gab keine Möglichkeit, den Fluss ohne ein Boot zu überqueren. Glücklicherweise fanden sie nach einer kurzen Suche ein Ruderboot mit zwei Rudern. Leider war das Boot zu klein, um sie alle zu tragen. Es konnte kaum zwei Personen auf einmal tragen. Schlimmer noch, aufgrund der Breite des Flusses gab es keine andere Möglichkeit, das Boot zurückzubringen, als es zurückzurudern. Da die Missionare den Kannibalen nicht trauen konnten, mussten sie sich einen Plan ausdenken, wie sie alle sechs sicher über den Fluss bringen konnten. Das Problem war, dass diese Kannibalen die Missionare töten und fressen würden, sobald es an einem Ort mehr Kannibalen als Missionare gäbe. Also musste unser Missionsprogrammierer einen Plan ausarbeiten, der sicherstellte, dass auf beiden Seiten des Flusses niemals Missionare in der Minderheit waren. Bei den Kannibalen kann man sich jedoch darauf verlassen, dass sie sonst kooperieren. Insbesondere werden sie keine potenzielle Nahrung aufgeben, so wie die Missionare keine potenziellen Bekehrten aufgeben werden.
Meine Frage ist ein Teil dieses Problems. Ich versuche, eine Funktion zu entwickeln, die eine Liste möglicher Bootsladungen zurückgibt (z.B. wenn boat_capacity 3 ist, dann [(3mis, 0can), (2mis, 1can), (1mis, 1can), ...] ). Ich habe num (Anzahl der Missionare oder Kannibalen) und Bootskapazität als Eingaben für meine Funktion.
Wie gestalten Sie Ihre Funktion und Ihren Algorithmus?