Personal tools
Document Actions

odra.13 graphsqueens

by Paul McJones last modified 2019-05-20 16:52

The N Queens problem AUTOR: FELIKS KLUZNIAK

* AUTOR: FELIKS KLUZNIAK.



*GRAFY SKIEROWANE BEZ PETLI .
  -AJOP(".",1,"X'(X'X)")!
-AJOP("&",2,"(X'X)'X")!
*DODANIE NOWEJ DROGI .
+LUK(*OD,*DO,*KM) -AJOUT(+(DROGA(*OD,*DO,*KM)).NIL).
*WSZYSTKIE DROGI OD DANEGO PUNKTU.
+WSZYSTKIEOD(*OD) -W(POCZATEK&*OD,0) -IMPAS.
+W(*D&*OD,*KM) -WYPISZ(*D&*OD,*KM) -DROGA(*OD,*DO,*K)
   -PLUS(*KM,*K,*M) -W(*D&*OD&*DO,*M).
+WYPISZ(*D,*KM) -LIGNE -SORM("DLUGOSC ") -SORT(*KM)
   -SORM(" :") -WYP(*D) -LIGNE.
+WYP(POCZATEK&*OD) -LIGNE -SORM("  ") -SORT(*OD) -/.
+WYP(*A&*B) -WYP(*A) -SORM(" -> ") -SORT(*B).
* WSZYSTKIE DROGI MIEDZY DWOMA PUNKTAMI .
+WSZYSTKIEODDO(*OD,*DO) -V(POCZATEK&*OD,*DO,0) -IMPAS.
+V(*D&*DO,*DO,*KM) -WYPISZ(*D&*DO,*KM) -/.
+V(*D&*OD,*DO,*KM) -DROGA(*OD,*TO,*K)
   -PLUS(*KM,*K,*M) -V(*D&*OD&*TO,*DO,*M).
*GRAFY CYKLICZNE.
+DROGI(*OD,*DO) -DR(POCZATEK&*OD,*DO,0).
+DR(*D&*DO,*DO,*KM) -WYPISZ(*D&*DO,*KM) -/ -IMPAS.
+DR(*D&*OST,*DO,*K) -DROGA(*OST,*NAST,*M) -NIECYKL(*NAST,*D&*OST) -PLUS(*K,*M,
   *KM) -DR(*D&*OST&*NAST,*DO,*KM).
+NIECYKL(*X,POCZATEK) -/.
+NIECYKL(*PUNKT,*D&*PUNKT) -/ -IMPAS.
+NIECYKL(*X,*D&*Y) -NIECYKL(*X,*D).
-LUK(A,BC,5)! -LUK(A,CD,6)! -LUK(AB,CD,7)! -LUK(AC,CD,8)!
-LUK(A,AB,1)! -LUK(AB,BC,2)! -LUK(BC,CD,3)! -LUK(A,AC,4)!
-WSZYSTKIEOD(CD)!  -WSZYSTKIEOD(BC)!
-WSZYSTKIEOD(AC)! -WSZYSTKIEOD(AB)!
-WSZYSTKIEOD(A)!
-WSZYSTKIEODDO(CD,AB)! -WSZYSTKIEODDO(AB,BC)!
-WSZYSTKIEODDO(AB,CD)! -WSZYSTKIEODDO(A,CD)!
-LUK(CD,A,9)! -LUK(BC,A,10)!
-DROGI(BC,A)!
-DROGI(A,A)!
-DROGI(AB,CD)!
-DROGI(A,CD)!



-SOP!
*** THE N QUEENS PROBLEM .
* BOARD REPRESENTATION: A LIST OF ROWS IN OCCUPIED COLUMNS .

-AJOP(".",1,"X'(X'X)")!

+QUEENS(*N) -Q(*N,0,NIL).

+Q(*N,*N,*BOARD) -PICTURE(*BOARD,*N) -/.
+Q(*N,*M,*BOARD) -GENERATEROW(*N,*ROW) -NOCONFLICT(*ROW.*BOARD)
   -PLUS(*M,1,*M1) -Q(*N,*M1,*ROW.*BOARD).

+GENERATEROW(0,*X) -/ -IMPAS.
+GENERATEROW(*N,*N).
+GENERATEROW(*N,*ROW) -MOINS(*N,1,*M) -GENERATEROW(*M,*ROW).

* CHECK FOR CONFLICT .

+NOCONFLICT(*BOARD) -CONFLICT(*BOARD) -/ -IMPAS.
+NOCONFLICT(*BOARD).

+CONFLICT(*ROW.*OTHERS) -SAMEROW(*ROW,*OTHERS) -/.
+CONFLICT(*ROW.*OTHERS) -SAMELOWDIAG(*ROW,*OTHERS) -/.
+CONFLICT(*ROW.*OTHERS) -SAMEHIGHDIAG(*ROW,*OTHERS) -/.
+CONFLICT -IMPAS.

+SAMEROW(*ROW,*ROW.*OTHERS) -/.
+SAMEROW(*ROW,*AROW.*OTHERS) -/ -SAMEROW(*ROW,*OTHERS).
+SAMEROW(*ROW,*EDGE) -IMPAS.

+SAMELOWDIAG(*ROW,*NEXTL.*OTHERS) -PLUS(*ROW,1,*NEXTL) -/.
+SAMELOWDIAG(*ROW,*AROW.*OTHERS) -PLUS(*ROW,1,*NEXTL) -/ -SAMELOWDIAG(*NEXTL,
                                                                       *OTHERS).
+SAMELOWDIAG(*ROW,*EDGE) -IMPAS.

+SAMEHIGHDIAG(0,*BOARD) -/ -IMPAS.
+SAMEHIGHDIAG(*ROW,*NEXTH.*OTHERS) -MOINS(*ROW,1,*NEXTH) -/.
+SAMEHIGHDIAG(*ROW,*AROW.*OTHERS) -MOINS(*ROW,1,*NEXTH) -/ -SAMEHIGHDIAG(*NEXTH,
                                                                       *OTHERS).
+SAMEHIGHDIAG(*ROW,*EDGE) -IMPAS.

* PRINT THE BOARD .

+PICTURE(*BOARD,*N) -PICT(*BOARD,*N,*N).

+PICT(*BOARD,*N,0) -DRAWROW(*N) -LIGNE -/.
+PICT(*BOARD,*N,*M) -DRAWROW(*N) -QUEENSINROW(*M,*BOARD) -MOINS(*M,1,*M1)
         -PICT(*BOARD,*N,*M1).

+DRAWROW(0) -SORM(".") -LIGNE -/.
+DRAWROW(*N) -SORM(".-") -MOINS(*N,1,*M) -DRAWROW(*M).

+QUEENSINROW(*M,*M.*REST) -/ -SORM("IQ") -QUEENSINROW(*M,*REST).
+QUEENSINROW(*M,*OTHER.*REST) -SORM("I ") -QUEENSINROW(*M,*REST) -/.
+QUEENSINROW(*M,NIL) -SORM("I") -LIGNE.


-QUEENS(0)!
-QUEENS(1)!
-QUEENS(2)!
-QUEENS(3)!
-QUEENS(4)!
-QUEENS(5)!
-QUEENS(6)!

-TTY!

« November 2020 »
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: