1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Prolog - Queens Problem

  • whasabi
  • 5. Januar 2014 um 09:56
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • whasabi
    Punkte
    20
    Beiträge
    2
    • 5. Januar 2014 um 09:56
    • #1

    Hallo :)

    Ich hab eine Prolog Datei bekommen, welche mir das 8 queens Problem lösen soll und nun sollen wir eine Fuktion schreiben, welche dann das Problem mit N queens lösen soll...
    nur hänge ich leider schon bei dem Programm welches wir bekommen haben

    könnt ihr mir vl sagen wie das funktioniert bzw wie ich mir da z.B. eine Lösung ausgeben kann (also vl ein Beispiel schreiben was ich in SWI Prolog eingeben kann und dann kommt eine Lösung?)
    Weil wenn ich das Programm schon nicht verstehe wie soll ich dann die N-Lösung noch machen? :(

    PHP
    % 8queens.pl: 
    % Program for solving the 8 queens problem 
    % List is an output argument in which the solution of the problem is written. 
    % Order of queens is represented with a list of coordinates of rows and columns. 
    solution(Order):- 
    Order=[_/0,_/1,_/2,_/3,_/4,_/5,_/6,_/7], 
    Rows=[0,1,2,3,4,5,6,7], 
    Diag_Asc=[-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7], 
    Diag_Des=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14], 
    solve(Order, Rows, Diag_Asc, Diag_Des). 
    % Arguments of predicate solve are in order: 
    % -solution of a problem (permitted order of queens); 
    % before execution of the procedure coordinates of columns need to be instantiated. 
    % -row of a queen that is currently being processed; 
    % -list of free descending diagonals which are described by the difference 
    % between row and column for every belonging field; 
    % -list of free ascending diagonals which are described by the sum 
    % between row and column for every belonging field; 
    solve([],_,_,_). 
    solve([Row/Column|Tail], R, Da, Dd):- 
    remove(Row,R,R1), % removes Row in R, rezult is R1 
    U is -Row+Column, 
    remove(U, Da, Da1), 
    S is Row+Column, 
    remove(S, Dd, Dd1), 
    solve(Tail, R1, Da1, Dd1). 
    remove(Element, [Element|Tail], Tail). 
    remove(Element, [Element1|Tail], [Element1|Tail1]):- 
    remove(Element,Tail,Tail1).
    Alles anzeigen
  • Ravu al Hemio
    Punkte
    260
    Beiträge
    48
    • 7. Januar 2014 um 22:46
    • #2

    Prof. Ertl hat eine Lösung in seiner Diplomarbeit (pp. 58 ff.) präsentiert; vielleicht hilft dir das weiter.

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 7. Januar 2014 um 23:45
    • #3
    Zitat von whasabi

    nur hänge ich leider schon bei dem Programm welches wir bekommen haben


    Habt ihr wirklich ein Programm ohne Einrückungen bekommen?

    Zitat

    könnt ihr mir vl sagen wie das funktioniert bzw wie ich mir da z.B. eine Lösung ausgeben kann (also vl ein Beispiel schreiben was ich in SWI Prolog eingeben kann und dann kommt eine Lösung?)


    Erste Möglichkeit (wenn der Code in queens.pl liegt):

    Code
    $ swipl -s queens.pl   # Aufruf von der Shell aus
    ?- solution(S).   % das ist in SWI-Prolog selbst.
    S = [0/0, 4/1, 7/2, 5/3, 2/4, 6/5, 1/6, 3/7]   % für weitere Antworten ; drücken


    Zweite Möglichkeit:

    Code
    $ swipl
    ?- [queens].   % lade queens.pl
    ?- solution(S).   % wie zuvor
    S = [0/0, 4/1, 7/2, 5/3, 2/4, 6/5, 1/6, 3/7]

    Der nächste Schritt ist, das Programm, wenn es wirklich so ausschaut, mal ordentlich zu formatieren.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Tags

  • prolog
  • acht
  • damen
  • queens
  1. Datenschutzerklärung
  2. Impressum