1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Prolog - Queens Problem

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von whasabi, 5. Januar 2014.

  1. whasabi

    whasabi Grünschnabel

    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:
    1. % 8queens.pl:
    2. % Program for solving the 8 queens problem
    3. % List is an output argument in which the solution of the problem is written.
    4. % Order of queens is represented with a list of coordinates of rows and columns.
    5. solution(Order):-
    6. Order=[_/0,_/1,_/2,_/3,_/4,_/5,_/6,_/7],
    7. Rows=[0,1,2,3,4,5,6,7],
    8. Diag_Asc=[-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7],
    9. Diag_Des=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],
    10. solve(Order, Rows, Diag_Asc, Diag_Des).
    11. % Arguments of predicate solve are in order:
    12. % -solution of a problem (permitted order of queens);
    13. % before execution of the procedure coordinates of columns need to be instantiated.
    14. % -row of a queen that is currently being processed;
    15. % -list of free descending diagonals which are described by the difference
    16. % between row and column for every belonging field;
    17. % -list of free ascending diagonals which are described by the sum
    18. % between row and column for every belonging field;
    19. solve([],_,_,_).
    20. solve([Row/Column|Tail], R, Da, Dd):-
    21. remove(Row,R,R1), % removes Row in R, rezult is R1
    22. U is -Row+Column,
    23. remove(U, Da, Da1),
    24. S is Row+Column,
    25. remove(S, Dd, Dd1),
    26. solve(Tail, R1, Da1, Dd1).
    27. remove(Element, [Element|Tail], Tail).
    28. remove(Element, [Element1|Tail], [Element1|Tail1]):-
    29. remove(Element,Tail,Tail1).
     
  2. HonniCilest

    HonniCilest Erfahrenes Mitglied

    Ich verstehe leider nicht wirklich etwas von Prolog und kann daher nicht wirklich viel mit dem Code anfangen. Ich würde jedoch vermuten, dass der Algorithmus allgemeingültig ist. Daher würde ich damit anfangen Order (0 bis n-1), Rows (0 bis n-1), Diag_Asc (-n+1 bis n-1) und Diag_Des (0 bis 2n-2) allgemeingültig darzustellen, d.h. abhängig von n.
     
Die Seite wird geladen...