tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
1361
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jenny-birdy jenny-birdy ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    5
    Hallo,

    ich habe ein Problem mit einer Teilaufgabe aus einer Implementierung des Spiels Mastermind (siehe hierzu http://www.tutorials.de/forum/java-g...ml#post1812468)

    Zu der ersten Klasse, die bei obigem Link zu sehen ist, kommt nun eine zweite Klasse hinzu:
    public class MastermindClass {
    private SecretValueClass secretValue = new SecretValueClass();
    private String[] colorArr = new String [3];
    }


    Hier soll man nun die Methode boolean solve(int actIndex) für die Klasse
    MastermindClass schreiben. Darin soll mit Hilfe des Backtracking-Verfahrens die in
    secretValue enthaltene Kombination ermittelt werden. Diese soll am Ende in colorArr liegen. Der übergebene Wert actIndex gibt die aktuell betrachtete Position in colorArr an, der Rückgabewert meldet den Erfolg.

    Wäre sehr dankbar, wenn mir jemand bei dem Code für das Backtracking behilflich sein könnte.
    Vielen Dank schon mal...
     

  2. #2
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Du musst eine rekursive Funktion verwenden, die an der aktuellen Position(actIndex) alle Möglichkeiten durchprobiert und dabei jeweils sich selbst aufruft. Wenn der actIndex anzeigt, dass das colorArr komplett gefüllt ist, kannst du die isSolution-Funktion aufrufen und deren Ergebnis zurückliefern. Sobald der solve-Aufruf true zurückgibt, hörst du auf, weiter zu suchen.

    Für Denkfaule ist hier der Code
    Achtung Spoiler:

    boolean solve(int actIndex)
    {
    // Wenn das Array komplett gefüllt ist,
    // können wir es als Lösungsversuch verwenden
    if ( actIndex == colorArr.length )
    { return secretvalue.isSolution(colorArr); }

    int i;
    boolean ok;

    // Wir testen jede mögliche Belegung für die momentane Position
    for ( int i = 0; i < secretValueClass::allowedValue.length; i++ )
    {
    // aktuelle Möglichkeit einsetzen
    colorArr[actIndex] = secretValueClass::allowedValue[i];
    // rekursiver Aufruf zum Füllen der nächsten Position
    // bzw. zum Testen des Rate-Arrays
    ok = solve(actIndex+1);
    // wenn Lösung gefunden, dann Suche abbrechen
    if ( ok ) return true;
    }
    // Alle Möglichkeiten wurden durchprobiert
    // ohne dass eine Lösung gefunden wurde
    // => secretValue enthält kein korrektes secretArr
    return false;
    }
     

Ähnliche Themen

  1. Backtracking
    Von EddieG im Forum Java Grundlagen
    Antworten: 2
    Letzter Beitrag: 17.01.10, 20:21
  2. Backtracking Problem C-Sharp
    Von Audrey im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 03.06.08, 08:40
  3. Backtracking und TicTacTo?
    Von thatIsAFeature im Forum Coders Talk
    Antworten: 1
    Letzter Beitrag: 14.02.08, 15:04
  4. Backtracking Problem
    Von sra im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 12.03.04, 09:14
  5. Backtracking für Newbies?
    Von sra im Forum .NET Archiv
    Antworten: 15
    Letzter Beitrag: 10.03.04, 08:33

Stichworte