Я написал код для реализации алгоритма, который я нашел в перестановках строк. У меня есть массив слов (до 200), и мне нужно переставить список на 5 уровнях. По сути, сгруппировать строковые слова в пять и переставить их. Что у меня берет первые 5 слов, генерирует перестановки и игнорирует остальную часть массива?
Любые идеи приветствуются.
Private Function permute(ByVal chunks As ArrayList, ByVal k As Long) As ArrayList
ReDim ItemUsed(k)
pno = 0
Permutate(k, 1)
Return chunks
End Function
Private Shared Sub Permutate(ByVal K As Long, ByVal pLevel As Long)
Dim i As Long, Perm As String
Perm = pString ' Save the current Perm
' for each value currently available
For i = 1 To K
If Not ItemUsed(i) Then
If pLevel = 1 Then
pString = chunks.Item(i)
'pString = inChars(i)
Else
pString = pString & chunks.Item(i)
'pString += inChars(i)
End If
If pLevel = K Then 'got next Perm
pno = pno + 1
SyncLock outfile
outfile.WriteLine(pno & " = " & pString & vbCrLf)
End SyncLock
outfile.Flush()
Exit Sub
End If
' Mark this item unavailable
ItemUsed(i) = True
' gen all Perms at next level
Permutate(K, pLevel + 1)
' Mark this item free again
ItemUsed(i) = False
' Restore the current Perm
pString = Perm
End If
Next
K выше = = 5 для количества слов в одной перестановке, но когда я изменяю цикл for на размер массива, я получаю ошибку индекса за пределами границ