\documentclass{bschlangaul-aufgabe} \bLadePakete{java} \begin{document} \bAufgabenMetadaten{ Titel = {rekursives Backtracking}, Thematik = {Methode „fill()“}, Referenz = AUD.Algorithmenmuster.Backtracking.Methode-fill, RelativerPfad = Module/30_AUD/60_Algorithmenmuster/50_Backtracking/Aufgabe_Methode-fill.tex, ZitatSchluessel = aud:pu:3, ZitatBeschreibung = {Seite 2, Aufgabe 2}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Backtracking, Rekursion}, } Folgende Methode soll das Feld $a$ (garantiert der Länge $2n$ und beim ersten Aufruf von außen mit $0$ initialisiert) mittels rekursivem Backtracking so mit Zahlen $1 \leq x \leq n$ befüllen, dass jedes $x$ genau zweimal in $a$ vorkommt und der Abstand zwischen den Vorkommen genau $x$ ist. Sie soll genau dann \mintinline{java}|true| zurückgeben, wenn es eine Lösung gibt. \footcite[Seite 2, Aufgabe 2]{aud:pu:3} \index{Backtracking} \index{Rekursion} \bPseudoUeberschrift{Beispiele:} \begin{compactitem} \item \mintinline{java}|fill(2, [])| $\rightarrow$ \mintinline{java}|false| \item \mintinline{java}|fill(3, [])| $\rightarrow$ \mintinline{java}|[3; 1; 2; 1; 3; 2]| \item \mintinline{java}|fill(4, [])| $\rightarrow$ \mintinline{java}|[4; 1; 3; 1; 2; 4; 3; 2]| \end{compactitem} \begin{minted}{java} boolean fill (int n , int[] a) { if (n <= 0) { return true; } // TODO return false; } \end{minted} \begin{bAntwort} \bJavaDatei[firstline=4,lastline=21]{aufgaben/aud/muster/backtracking/RekursivesBacktracking} \begin{minted}{md} fill(0, []): fill(1, []): false fill(2, []): false fill(3, []): 3 1 2 1 3 2 fill(4, []): 4 1 3 1 2 4 3 2 fill(5, []): false fill(6, []): false fill(7, []): 7 3 6 2 5 3 2 4 7 6 5 1 4 1 fill(8, []): 8 3 7 2 6 3 2 4 5 8 7 6 4 1 5 1 fill(9, []): false fill(10, []): false fill(11, []): 11 6 10 2 9 3 2 8 6 3 7 5 11 10 9 4 8 5 7 1 4 1 \end{minted} \bPseudoUeberschrift{Kompletter Code} \bJavaDatei{aufgaben/aud/muster/backtracking/RekursivesBacktracking} \end{bAntwort} \end{document}