2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,63 +1,81 @@
|
|||
Public Sub Permute(n As Integer, Optional printem As Boolean = True)
|
||||
'generate, count and print (if printem is not false) all permutations of first n integers
|
||||
'Generate, count and print (if printem is not false) all permutations of first n integers
|
||||
|
||||
Dim P() As Integer
|
||||
Dim t As Integer, i As Integer, j As Integer, k As Integer
|
||||
Dim count As Long
|
||||
dim Last as boolean
|
||||
Dim t, i, j, k As Integer
|
||||
Dim Last As Boolean
|
||||
|
||||
If n <= 1 Then
|
||||
Debug.Print "give a number greater than 1!"
|
||||
|
||||
Debug.Print "Please give a number greater than 1"
|
||||
Exit Sub
|
||||
|
||||
End If
|
||||
|
||||
'initialize
|
||||
'Initialize
|
||||
ReDim P(n)
|
||||
For i = 1 To n: P(i) = i: Next
|
||||
|
||||
For i = 1 To n
|
||||
P(i) = i
|
||||
Next
|
||||
|
||||
count = 0
|
||||
Last = False
|
||||
|
||||
Do While Not Last
|
||||
'print?
|
||||
If printem Then
|
||||
For t = 1 To n: Debug.Print P(t);: Next
|
||||
Debug.Print
|
||||
End If
|
||||
count = count + 1
|
||||
'print?
|
||||
If printem Then
|
||||
|
||||
For t = 1 To n
|
||||
Debug.Print P(t);
|
||||
Next
|
||||
|
||||
Debug.Print
|
||||
|
||||
Last = True
|
||||
i = n - 1
|
||||
Do While i > 0
|
||||
If P(i) < P(i + 1) Then
|
||||
Last = False
|
||||
Exit Do
|
||||
End If
|
||||
i = i - 1
|
||||
Loop
|
||||
|
||||
If Not Last Then
|
||||
j = i + 1
|
||||
k = n
|
||||
While j < k
|
||||
' swap p(j) and p(k)
|
||||
t = P(j)
|
||||
P(j) = P(k)
|
||||
P(k) = t
|
||||
j = j + 1
|
||||
k = k - 1
|
||||
Wend
|
||||
j = n
|
||||
While P(j) > P(i)
|
||||
j = j - 1
|
||||
Wend
|
||||
j = j + 1
|
||||
'swap p(i) and p(j)
|
||||
t = P(i)
|
||||
P(i) = P(j)
|
||||
P(j) = t
|
||||
End If 'not last
|
||||
count = count + 1
|
||||
|
||||
Loop 'while not last
|
||||
Last = True
|
||||
i = n - 1
|
||||
|
||||
Do While i > 0
|
||||
|
||||
If P(i) < P(i + 1) Then
|
||||
|
||||
Last = False
|
||||
Exit Do
|
||||
|
||||
End If
|
||||
|
||||
i = i - 1
|
||||
Loop
|
||||
|
||||
j = i + 1
|
||||
k = n
|
||||
|
||||
While j < k
|
||||
' Swap p(j) and p(k)
|
||||
t = P(j)
|
||||
P(j) = P(k)
|
||||
P(k) = t
|
||||
j = j + 1
|
||||
k = k - 1
|
||||
Wend
|
||||
|
||||
j = n
|
||||
|
||||
While P(j) > P(i)
|
||||
j = j - 1
|
||||
Wend
|
||||
|
||||
j = j + 1
|
||||
'Swap p(i) and p(j)
|
||||
t = P(i)
|
||||
P(i) = P(j)
|
||||
P(j) = t
|
||||
Loop 'While not last
|
||||
|
||||
Debug.Print "Number of permutations: "; count
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue