1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Prolog - Queens Problem

  • whasabi
  • 5. Januar 2014 um 09:56
  • Unerledigt
  • whasabi
    2
    whasabi
    Mitglied
    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? :frowning_face:

    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
    5
    Ravu al Hemio
    Mitglied
    Reaktionen
    20
    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.

    ~~ Ondra „Ravu al Hemio“ Hošek
    I know what PC LOAD LETTER means

    Tutor außer Dienst · OOP · OS · PK · PP

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    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.

    *plantsch*

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Tags

  • prolog
  • acht
  • damen
  • queens

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung