37 lines
945 B
Plaintext
37 lines
945 B
Plaintext
sub perms n
|
|
dim p((n+1)*4)
|
|
for i = 1 to n : p(i) = i*-1 : next i
|
|
s = 1
|
|
|
|
while 1
|
|
print "Perm: [ ";
|
|
for i = 1 to n
|
|
print abs(p(i)); " ";
|
|
next i
|
|
print "] Sign: "; s
|
|
|
|
k = 0
|
|
for i = 2 to n
|
|
if p(i) < 0 and (abs(p(i)) > abs(p(i-1))) and (abs(p(i)) > abs(p(k))) then k = i
|
|
next i
|
|
for i = 1 to n-1
|
|
if p(i) > 0 and (abs(p(i)) > abs(p(i+1))) and (abs(p(i)) > abs(p(k))) then k = i
|
|
next i
|
|
if k then
|
|
for i = 1 to n 'reverse elements > k
|
|
if abs(p(i)) > abs(p(k)) then p(i) = p(i)*-1
|
|
next i
|
|
if p(k) < 0 then i = k-1 else i = k+1 'swap K with element looked at
|
|
temp = p(k)
|
|
p(k) = p(i)
|
|
p(i) = temp
|
|
s = s*-1 'alternate signs
|
|
end if
|
|
if k = 0 then exit while
|
|
wend
|
|
end sub
|
|
|
|
call perms 3
|
|
print
|
|
call perms 4
|