![]() |
8-Damen-Problem
ich hab mich mal wieder dran gegeben und versuche es zu lösen...
wenn ich weiss welche dame als letztes dazugekommen ist, kann ich ja wesentlich schneller überprüfen ob eine stellung gültig ist. ist dieser code korrekt? kann man ihn noch optimieren?
Delphi-Quellcode:
function TForm1.IsValid(Feld:TFeld; NewX, NewY: Byte):Boolean;
var i:Integer; Failed:Boolean; begin for i:=1 to Newy-1 do Failed:=Failed or Feld[i,NewY]; if not Failed then for i:=NewY+1 to 8 do Failed:=Failed or Feld[i,NewY]; if not Failed then for i:=1 to NewX-1 do Failed:=Failed or Feld[NewX,i]; if not Failed then for i:=NewX+1 to 8 do Failed:=Failed or Feld[NewX,i]; if not Failed then for i:=NewX-1 downto 1 do if NewY-i>0 then Failed:=Failed or Feld[NewX-i,NewY-i]; if not Failed then for i:=1 to 8-NewX do if NewY+i>0 then Failed:=Failed or Feld[NewX+i,NewY+i]; Result:=Failed; end; |
Re: 8-Damen-Problem
Was hat hierbei die Varaible/Array Feld zu erledigen? Prüft die, ob auf dem jeweiligen Feld schon eine Dame steht?
MfG Binärbaum |
Re: 8-Damen-Problem
Delphi-Quellcode:
hoffe das hilft weiter ;)
TFeld = array[1..8,1..8] of boolean;
//True = Dame //False = Keine Dame |
Re: 8-Damen-Problem
Naja, das hilft erstmal.
Mal eine ganz andere Idee: ich habe dieses Problem auch schon mal bearbeitet (allerdings in Real auf einem richtigen Schchbrett). Soweit ich mich erinnere, standen die Damen dort alle so, dass man von der einen Dame zurnächsten durch den Rösselsprung kam (der L-förmige zug, den sonst der Springer macht). Vielleicht hilft dir das ja weiter. Und zur Code-Optimierung: man könnte alle for-Schleifen durch entsprechende while-Schleifen ersetzen und in die Durchlaufbedingung Failed mit einbeziehen. Dann würde die Schleife nicht noch mehrmals durchlaufen, wenn z.B. schon nach dem ersten Durchlauf klar ist, dass die eingegebene Position nicht die richtige ist. Dadurch hätte man zwar erstmal ein paar Zeilen mehr Code, da die Laufvariable i "manuell" hochgezählt werden muss, aber dafür müsste der Code dann auch schneller sein. MfG Binärbaum |
Re: 8-Damen-Problem
ja, ich "kann" schach spielen, und nein, das mit dem rösselsprung funzt so astrein nicht (man darf auf jeden fall nicht in der ecke anfangen...)
ich werd das nochmal alles durchgucken |
Re: 8-Damen-Problem
Hab ich etwa behauptet, dass du nicht Schach spielen kannst? Kann mich nicht daran erinnern. :gruebel:
Das mit dem Rösselsprung sollte übrigens nur ein Denkanstoss sein. Inwiefern man das auf dem PC umsetzen kann (und ob es schneller ist als die bisherige Funktion), dass hab ich nicht gesagt. MfG Binärbaum |
Re: 8-Damen-Problem
sollte kein angriff sein
ich wollte nur hierauf eine antwort geben Zitat:
|
Re: 8-Damen-Problem
Das sollte nicht heißen, dass du nicht Schach spielen kannst. Ich wollte nur sichergehen, dass ich auch richtig verstanden werde. Man weiß ja nicht, inwiefern sich der Gegenüber mit Schach auskennt. Also nichts für ungut.
MfG Binärbaum |
Re: 8-Damen-Problem
Hallo,
ich spiel kein Schach. Wieso 8 Damen, ich denke sind nur 2. :gruebel: :wiejetzt: MfG fR34k |
Re: 8-Damen-Problem
@freak
Das Acht-Damen-Problem beschäftigt sich damit, wie man 8 Damen so auf einem leeren Schachbrett platzieren kann ,dass sie sich nicht gegenseitig schlagen können. Hat also mit dem eigentlichen Schachspiel wenig zu tun. (Bis auf die Damen natürlich :wink: ) MfG Binärbaum |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz