ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
1361
1361
EMPFEHLEN
-
01.11.09 11:48 #1
- 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...
-
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
-
Backtracking
Von EddieG im Forum Java GrundlagenAntworten: 2Letzter Beitrag: 17.01.10, 20:21 -
Backtracking Problem C-Sharp
Von Audrey im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 03.06.08, 08:40 -
Backtracking und TicTacTo?
Von thatIsAFeature im Forum Coders TalkAntworten: 1Letzter Beitrag: 14.02.08, 15:04 -
Backtracking Problem
Von sra im Forum C/C++Antworten: 5Letzter Beitrag: 12.03.04, 09:14 -
Backtracking für Newbies?
Von sra im Forum .NET ArchivAntworten: 15Letzter Beitrag: 10.03.04, 08:33





Zitieren
Login





