Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 01:26

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Java Acht-Damen-Problem

Discussion on Java Acht-Damen-Problem within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
The_Dentist's Avatar
 
elite*gold: 13
Join Date: Nov 2014
Posts: 71
Received Thanks: 4
Java Acht-Damen-Problem

Hallo,

ich habe ein Problem mit einer Aufgabe, die uns im Studiengang Informatik gestellt wurde:

Es geht um das Acht-Damen-Problem und wir haben in der Vorlesung folgende Methode zur Lösung geschrieben:

Code:
public static boolean loese (int x) {
		if (x==8) return true; 
		for (int y=0;y<8;y++) {
			feld [x] = y;
			if (zulaessig(x))
					if (loese (x+1)) return true;
		}
	
		return false;  
}
Es geht jetzt darum, die Methode so abzuändern, dass er alle Möglichkeiten zählt, welche die Damen annehmen können, ohne sich gegenseitig schlagen zu können.

Meine Überlegung ist die Folgende: Soblad x = 8 wird, habe ich ja im Prinzip alle 8 Damen gesetzt, d.h. ich habe bereits eine Lösung gefunden und kann den Zähler um eins erhöhen.

Jetzt muss ich diese Lösung irgendwie ausschließen und eine neuen Versuch starten.

Und dabei komme ich nicht weiter. Könnte mir dabei Jemand helfen?

Vielen Dank.

LG
The_Dentist
The_Dentist is offline  
Old 12/07/2014, 17:14   #2
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Hallo,

das hatten wir auch vor kurzem gehabt. Das Verfahren nennt sich Backtracking.

Es wird so lange die Figur zurückgesetzt, bis sich die nächste nicht mehr schlagen kann.

Hierzu ein Link, den ich durch Google gefunden habe:
Mikesch01 is offline  
Thanks
1 User
Old 12/07/2014, 17:36   #3
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Mussten das letztens auch programmieren in C.
Habs mal nach Java umgeschrieben.

Die Methode die du erweitern sollst, wird in etwa so aussehen:
PHP Code:
void setze (int n) {
    
int i;
    if (
n==8) {
        
ausgabe();
    } else
        for (
i=0i<8i++) {
            if (!
bedroht(i,n)) {
                
brett[n]=i;
                
setze (n+1);
            }
        }

Das ist genau dieses Backtracking wovon mein Vorposter sprach.
Jetzt brauchste nur noch eine Methode "bedroht" die prüft, ob eine Dame "geschlagen" werden kann.

Am Ende kriegste dann alle 92 Lösungen.
Hab mir noch eine Ausgabe Methode geschrieben, sodass das dann so aussieht:
Belur is offline  
Thanks
1 User
Old 12/07/2014, 17:50   #4
 
The_Dentist's Avatar
 
elite*gold: 13
Join Date: Nov 2014
Posts: 71
Received Thanks: 4
Perfekt, vielen Dank! Jetzt habe ich es auch geschafft, jetzt würde mich nur noch interessieren, wie Du diese Darstellung so hinbekommen hast.

Du übergibst deiner Methode ausgabe() ja keinen Wert.

€dit: Ich sehe gerade, die wollen einen boolean Rückgabewert bei der Methode. Damit ist es mir immer noch nicht ganz klar, wie das dann funktionieren soll <.<
The_Dentist is offline  
Old 12/07/2014, 17:58   #5
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Kannste ja schnell abändern:
PHP Code:
public boolean setze (int n) {
    
int i;
    if (
n==8) {
        return 
true;
        
//ausgabe();
    
} else
        for (
i=0i<8i++) {
            if (!
bedroht(i,n)) {
                
brett[n]=i;
                if(
setze (n+1)){
                return 
true;
               }
;
            }
        }

Meine Ausgabe sieht so aus:
PHP Code:
public void ausgabe() {
        
System.out.println("Loesung Nummer:" loesung);
        
loesung++;
        
int ij;
        
System.out.println();
        for (
08i++) {
            
System.out.print(" |");
            for (
08j++)
                if (
== brett[i])
                    
System.out.print("D|");
                else
                    
System.out.print(" |");
            
System.out.println();
        }
        
System.out.println();
        
System.out.println();
    } 
Belur is offline  
Thanks
1 User
Old 12/07/2014, 18:03   #6
 
The_Dentist's Avatar
 
elite*gold: 13
Join Date: Nov 2014
Posts: 71
Received Thanks: 4
Quote:
Originally Posted by Belur View Post
Kannste ja schnell abändern:
PHP Code:
public boolean setze (int n) {
    
int i;
    if (
n==8) {
        return 
true;
        
//ausgabe();
    
} else
        for (
i=0i<8i++) {
            if (!
bedroht(i,n)) {
                
brett[n]=i;
                if(
setze (n+1)){
                return 
true;
               }
;
            }
        }

^Genau, das ist das Problem, da er dann sofort abbricht, wenn er eine Lösung gefunden hat.

Mein Code sieht jetzt wie folgt aus:
The_Dentist is offline  
Old 12/07/2014, 18:22   #7
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Ja dieser Teil ist Quatsch:

PHP Code:
if(loese (x+1)) [COLOR="red"]return true;[/COLOR
Mach die if-Bedingung darum weg. So wie ich in meinem ersten Beispiel.
Belur is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
recompile Problem (Block.java, item.java)
04/13/2013 - Minecraft - 1 Replies
Guten Morgen liebe Com (: Ich versuche etwas neues in Minecraft.. für mich einzubauen.. neuer Block + das Item dazu, des eingepflanzt werden muss.. wie bei einer Karotte oder einer Kartoffel. Ich zeige euch den Inhalt meiner BlockOnion.java package net.minecraft.src;
Hallo Meine Damen und Herren.
11/17/2012 - Say Hello - 5 Replies
Hallo, Barny stinson ist nun eingetreten Haha Spass^^ Ich hab nen Wunsch ich will einen Keystore aufmachen UJnd sage Mal Hallo Wenn ihr mal Lust habt mit zu machen PN (falls es hier sowas gibt) Also dann
Guten Tag die Damen ;)
09/07/2012 - Say Hello - 5 Replies
Tag, ich bin Fachi(Fre4k1234) und bin hier schon Ewigkeiten angemeldet gewesen und möchte mich jetzt auch mal mit dem Forum hier beschäftigen (Besonderst den Black Market) :) Hoffe das geht alles wie geschmiert und nochmal: Hallo mit dem Afro :mofo: :D
[B] Damen Schuhe Geschenk für Freundin
10/01/2011 - Trading - 0 Replies
Suchen sie ein geschenk für ihre freundin ? das richtige ist hier . Wunderschöne s.Oliver Lack-Peeptoes gelb, Gr. 40 *neu* | eBay
Dessous für die Damen? :D
01/09/2011 - Last Chaos - 2 Replies
Heyyyy Leuts. Ich weiß...ich bin ein perversling aber ich bin froh drum ;) Habe schon einige gesehen, die nette Dessous für ne Heile haben (nackt muss nicht sein ich find Dessous sehen an einer Frau auch sehr schön aus ;)) Gibt es ein paar Genies die files haben die mein Lc Leben verbessern? Bitte danke und bb Ps: Für jede freundliche Antwort die hilft gibt es natürlich ein Thanks ;P



All times are GMT +1. The time now is 01:26.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.