39 lines
952 B
Plaintext
39 lines
952 B
Plaintext
DIM List%(3)
|
|
List%() = 1, 2, 3, 4
|
|
FOR perm% = 1 TO 24
|
|
FOR i% = 0 TO DIM(List%(),1)
|
|
PRINT List%(i%);
|
|
NEXT
|
|
PRINT
|
|
PROC_NextPermutation(List%())
|
|
NEXT
|
|
END
|
|
|
|
DEF PROC_NextPermutation(A%())
|
|
LOCAL first, last, elementcount, pos
|
|
elementcount = DIM(A%(),1)
|
|
IF elementcount < 1 THEN ENDPROC
|
|
pos = elementcount-1
|
|
WHILE A%(pos) >= A%(pos+1)
|
|
pos -= 1
|
|
IF pos < 0 THEN
|
|
PROC_Permutation_Reverse(A%(), 0, elementcount)
|
|
ENDPROC
|
|
ENDIF
|
|
ENDWHILE
|
|
last = elementcount
|
|
WHILE A%(last) <= A%(pos)
|
|
last -= 1
|
|
ENDWHILE
|
|
SWAP A%(pos), A%(last)
|
|
PROC_Permutation_Reverse(A%(), pos+1, elementcount)
|
|
ENDPROC
|
|
|
|
DEF PROC_Permutation_Reverse(A%(), first, last)
|
|
WHILE first < last
|
|
SWAP A%(first), A%(last)
|
|
first += 1
|
|
last -= 1
|
|
ENDWHILE
|
|
ENDPROC
|