Der Nahtschnitt-Algorithmus oder eine komplexere Version davon wird für die inhaltsbezogene Größenänderung von Bildern in verschiedenen Grafikprogrammen und Bibliotheken verwendet. Lass es uns spielen!
Ihre Eingabe wird ein rechteckiges zweidimensionales Array von Ganzzahlen sein.
Ihre Ausgabe ist dasselbe Array, eine Spalte enger, wobei ein Eintrag aus jeder Zeile entfernt wird, wobei diese Einträge einen Pfad von oben nach unten mit der niedrigsten Summe aller solcher Pfade darstellen.
https://en.wikipedia.org/wiki/Seam_carving
In der obigen Abbildung wird der Wert jeder Zelle in Rot angezeigt. Die schwarzen Zahlen sind die Summe aus dem Wert einer Zelle und der niedrigsten schwarzen Zahl in einer der drei darüber liegenden Zellen (auf die die grünen Pfeile zeigen). Die weiß hervorgehobenen Pfade sind die beiden Pfade mit der niedrigsten Summe, beide mit einer Summe von 5 (1 + 2 + 2 und 2 + 2 + 1).
In einem Fall, in dem zwei Pfade für die niedrigste Summe gebunden sind, spielt es keine Rolle, welche Sie entfernen.
Die Eingabe sollte von stdin oder als Funktionsparameter erfolgen. Es kann in einer Weise formatiert werden, die für die Sprache Ihrer Wahl geeignet ist, einschließlich Klammern und / oder Trennzeichen. Bitte geben Sie in Ihrer Antwort an, wie die Eingabe erwartet wird.
Die Ausgabe sollte in einem eindeutig begrenzten Format oder als Funktionsrückgabewert in der Entsprechung Ihrer Sprache zu einem 2D-Array (einschließlich verschachtelter Listen usw.) erfolgen.
Beispiele:
Input:
1 4 3 5 2
3 2 5 2 3
5 2 4 2 1
Output:
4 3 5 2 1 4 3 5
3 5 2 3 or 3 2 5 3
5 4 2 1 5 2 4 2
Input:
1 2 3 4 5
Output:
2 3 4 5
Input:
1
2
3
Output:
(empty, null, a sentinel non-array value, a 0x3 array, or similar)
BEARBEITEN: Die Zahlen sind alle nicht negativ und jede mögliche Naht hat eine Summe, die in eine vorzeichenbehaftete 32-Bit-Ganzzahl passt.